C# 将一个类对象强制转换为另一个类对象

C# 将一个类对象强制转换为另一个类对象,c#,C#,我有两个类A和B,我想将A的一个实例转换为B。最好的方法是什么? 如何创建实用程序类来执行此任务 public class A {} public class B {} 一个好的开始是查看上的MSDN文档 由于这两个类之间没有直接关系,因此需要编写一个。例如: public class A { public int AValue { get; set; } } public class B { public int BValue { get; set; } publ

我有两个类A和B,我想将A的一个实例转换为B。最好的方法是什么? 如何创建实用程序类来执行此任务

public class A
{}
public class B
{}

一个好的开始是查看上的MSDN文档

由于这两个类之间没有直接关系,因此需要编写一个。例如:

public class A
{
    public int AValue { get; set; }
}

public class B
{
    public int BValue { get; set; }

    public static explicit operator B(A instanceOfA)
    {
        return new B { BValue = instanceOfA.AValue };
    }
}
public class A
{
    public int Value { get; set; }
}

public class B : A
{
    public string OtherValueSpecificToB { get; set; }
}
然后你可以写:

A instanceOfA = new A { AValue = 7 };
B instanceOfB = (B)instanceOfA;

// Will output "7"
Console.WriteLine(instanceOfB.BValue);
我从MSDN上获得了这个示例的文档

如果两个类之间存在直接关系,例如
B
派生自
a
,例如:

public class A
{
    public int AValue { get; set; }
}

public class B
{
    public int BValue { get; set; }

    public static explicit operator B(A instanceOfA)
    {
        return new B { BValue = instanceOfA.AValue };
    }
}
public class A
{
    public int Value { get; set; }
}

public class B : A
{
    public string OtherValueSpecificToB { get; set; }
}
如果要从B转换为A,则不需要任何额外的代码:

B instanceOfB = new B { OtherValueSpecificToB = "b", Value = 3 };
A instanceOfBCastToA = (A)instanceOfB;

// Will output "3";
Console.WriteLine(instanceOfBCastToA.Value);
// Will not compile as when being treated as an "A" there is no "OtherValueSpecificToB" property
Console.WriteLine(instanceOfBCastToA.OtherValueSpecificToB);

要从一个类转换到另一个类,您必须实现自己的转换。正如您在问题中所定义的,这些类不能转换到另一个类。C#是一种强类型语言,因此您可以进行此类转换。强制转换只能在继承(基类或接口)行上下执行。问题中描述的两种类型完全不相关,因此不能将它们一个强制转换为另一个。正如Tim所说,您可以提供一个转换,该转换将复制或以其他方式基于另一种类型初始化一个实例