使用父对象创建子对象
本文关键字:对象 创建 | 更新日期: 2023-09-27 18:34:03
假设我有这些类:
Class A {};
Class B : A {} ;
和一个返回A
的函数:
public A read_an_A();
由于B
是A
的孩子,我希望能够在以下意义上读取它的A
属性:
B b = new B ( read_an_A() );
(假设使用默认复制构造函数)
或者可能是这样的:
B b = (B) read_an_A ();
以上所有显然都被打破了,实现这一点的正确方法是什么?
一种方法是添加一个 B 的构造函数,该构造函数采用 A,并从中获取相关部分:
public B(A a) {
this.x = a.x;
this.y = a.y;
}
你的B类最有能力知道该做什么,所以这种方法也相当干净。它让你写
B b = new B(read_an_A());
就像你在问题中建议的那样。当然,B 很可能也需要其他构造函数。
如果您不知道重新调整的 A 是否为 B - 您需要确保否则将出现运行时异常
var a = read_an_A();
if (a is B)
{
var b = (B)a;
....
}