使用父对象创建子对象

时间:2013-10-06 14:53:03

标签: c# inheritance

假设我有这些课程:

Class A {};
Class B : A {} ;

以及返回A的函数:

 public A read_an_A();

由于BA的孩子,我希望能够在以下意义上阅读A属性:

B b = new B ( read_an_A() );

(假设使用默认的复制构造函数)

或者可能是这样的:

B b = (B) read_an_A ();

以上所有内容都明显被打破,实现这一目标的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

这样做的一种方法是添加一个B的构造函数,它接受A,并从中收集相关的部分:

public B(A a) {
    this.x = a.x;
    this.y = a.y;
}

你的B班最适合知道该怎么做,所以这种方法也相当干净。它可以让你写

B b = new B(read_an_A());
像你在问题中建议的那样。当然B也很可能需要其他构造函数。

答案 1 :(得分:0)

如果您不知道A重新调整是否为B - 您需要确认或者您将获得运行时异常

var a = read_an_A();
if (a is B) 
{
    var b = (B)a;
    ....
}