【发布时间】:2013-05-05 06:37:58
【问题描述】:
当D类派生自B类时,如何只分配给它的B部分?
在 C++ 中,我会这样做:
D d;
B b;
d.B::operator = (b);
什么是 C# 等价物?
【问题讨论】:
-
你的意思是base关键字吗?
标签: c# inheritance assignment-operator
当D类派生自B类时,如何只分配给它的B部分?
在 C++ 中,我会这样做:
D d;
B b;
d.B::operator = (b);
什么是 C# 等价物?
【问题讨论】:
标签: c# inheritance assignment-operator
在 C# 中没有切片的等价物。您需要手动创建基类的实例并复制相关属性。如果基类有一个非虚拟克隆方法(或复制构造函数),那么你可以使用它,但你不能像在 C++ 中那样使用切片。
【讨论】:
如果
class B {}
class D : B {}
那么D 本质上是是一个具有附加功能的B。它没有“部分”是B,它是一个B。
因此,这不可能以您尝试做的直接方式进行。您必须自己在D 中实现一个函数,例如void Merge(B b),它将B 中的字段分配给对象的(D)相关base 字段。
【讨论】:
虽然问题是针对 C#,但这里有两种针对 C++ 的可能性,因为那里也可能出现问题:
任何一个
static_cast<B&>(d) = b;
或没有演员表
B & b_of_d = d;
b_of_d = b;
【讨论】: