我有以下课程:
public class A
{
public object Property1 { get; set; }
public object Property2 { get; set; }
public object Property3 { get; set; }
//And for the sake of the example another 20 fields/properties
public A()
{
}
}
另一堂课:
public class B : A
{
//Bunch of other properties...
}
我有一个方法(来自不同的程序集,我无法更改),它返回A类的新实例。
有没有办法使用A类的所有属性和字段(私有字段)来转换/转换/初始化B类?
我无法更改A类中的任何内容(它来自不同的程序集)
是否有可能在不改变继承的情况下实现这一目标?
答案 0 :(得分:1)
要考虑的是组合而不是继承。
class B
{
public A InstanceOfA { get; set; }
}
然后,您可以轻松创建B的实例,并为其提供A的实例。
你要问的是什么。您可以轻松地复制所有属性的值,但是对于字段,您必须使用反射来获取它们的值,因为如果将A创建为A,则无法简单地将A转换为B. A型。
答案 1 :(得分:0)
有没有办法转换/转换/初始化B类
您可以尝试显式类型转换,例如以下示例
struct Digit
{
byte value;
public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}
public static explicit operator Digit(byte b) // explicit byte to digit conversion operator
{
Digit d = new Digit(b); // explicit conversion
System.Console.WriteLine("Conversion occurred.");
return d;
}
}
class TestExplicitConversion
{
static void Main()
{
try
{
byte b = 3;
Digit d = (Digit)b; // explicit conversion
}
catch (System.Exception e)
{
System.Console.WriteLine("{0} Exception caught.", e);
}
}
}
来自msdn =>的复制代码Using Conversion Operators