C# 仅将对象的一部分指定给基类

C# 仅将对象的一部分指定给基类,c#,inheritance,assignment-operator,C#,Inheritance,Assignment Operator,当D类派生自B类时,我如何仅将其B部分赋值 在C++中,我会这样做: D d; B b; d.B::operator = (b); 什么是C#的等价物?在C#中没有切片的等价物。您需要手动创建基类的实例并复制相关属性。如果基类有非虚拟克隆方法(或复制构造函数),那么您可以使用它,但是不能使用切片作为C++。 < P>如果 class B {} class D : B {} 然后D本质上是具有附加功能的aB。它的“部分”不是B,而是B 所以这是不可能的,就像你们试图做的那个样直接。您必须自己在

当D类派生自B类时,我如何仅将其B部分赋值

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

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

什么是C#的等价物?

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

< P>如果

class B {}
class D : B {}
然后
D
本质上是具有附加功能的
a
B
。它的“部分”不是
B
,而是
B


所以这是不可能的,就像你们试图做的那个样直接。您必须自己在
d
中为它实现一个函数,例如
void Merge(B B)
,它将
B
中的字段分配给对象的(
d
)相关的
base
字段。

你是指关键字吗?我想我必须了解对象赋值在C#中有很大不同-它总是将引用赋值给对象,而不是对象内容。@Suma这只是类的情况,而不是结构。在值类型(包括用户定义结构)的情况下,变量代表对象本身的值,就像C++中的那样。不同之处在于,在C#中,结构只能从一个公共基类型继承,这就是C#阻止切片的原因。