当 D 类派生自 B 类时,我如何只分配给它的 B 部分?
在 C++ 中,我会这样做:
D d;
B b;
d.B::operator = (b);
什么是 C# 等价物?
当 D 类派生自 B 类时,我如何只分配给它的 B 部分?
在 C++ 中,我会这样做:
D d;
B b;
d.B::operator = (b);
什么是 C# 等价物?
在 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;
另请参阅此答案