使用子类中的该类的实例初始化父类的成员

时间:2015-01-29 12:59:05

标签: c# oop inheritance

我有以下课程:

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类中的任何内容(它来自不同的程序集)

是否有可能在不改变继承的情况下实现这一目标?

2 个答案:

答案 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