1

当 D 类派生自 B 类时,我如何只分配给它的 B 部分?

在 C++ 中,我会这样做:

D d;
B b;
d.B::operator = (b);

什么是 C# 等价物?

4

3 回答 3

1

在 C# 中没有切片的等价物。您需要手动创建基类的实例并复制相关属性。如果基类有一个非虚拟克隆方法(或复制构造函数),那么你可以使用它,但你不能像在 C++ 中那样使用切片。

于 2013-05-10T14:32:20.737 回答
1

如果

class B {}
class D : B {}

那么D本质上一个B附加的功能。它没有“部分” B,它一个B

因此,这不可能以您尝试做的直接方式进行。您必须自己实现一个函数D,例如void Merge(B b)将字段分配给B对象的 ( D) 相关base字段。

于 2013-05-10T14:55:53.007 回答
-1

虽然问题是针对 C# 的,但这里有两种 C++ 的可能性,因为问题也可能在那里出现:要么强制转换,要么 static_cast<B&>(d) = b; 不强制转换

B & b_of_d = d;
b_of_d = b;

另请参阅此答案

于 2022-02-02T22:00:20.877 回答