【发布时间】:2010-09-04 22:19:48
【问题描述】:
我有两节课。基类是A。继承类是B。我想将一个对象的基类复制到另一个对象的基类中,而不影响原始类。但是,.NET 似乎忽略了复制。这在.NET 中是不可能的吗?我知道这在 C++ 中是可能的。我已经包含了 C++ 代码来说明我想要实现的目标。
我明白,在这个特定的示例中,我可以直接分配值 bClass.ValueA = aClass.ValueA。但是如果 A 类有私人成员呢?这是不可能的。
示例类
Public Class A
Public ValueA As String
End Class
Public Class B
Inherits A
Public ValueB As String
End Class
守则
Dim aClass As New A
Dim bClass As New B
aClass.ValueA = "AClass"
bClass.ValueA = "BClass"
bClass.ValueB = "BClass"
Dim baseBClass As A
baseBClass = CType(bClass, A)
baseBClass = aClass
结果:
aClass.ValueA = "AClass"
bClass.ValueA = "BClass"
bClass.ValueB = "BClass"
baseBClass.ValueA = "AClass"
预期结果:
aClass.ValueA = "AClass"
bClass.ValueA = "AClass"
bClass.ValueB = "BClass"
baseBClass.ValueA = "AClass"
C++解释比较
#include <string>
#include <iostream>
using namespace std;
class A {
public:
string ValueA;
};
class B : public A {
public:
string ValueB;
};
int main(int argc, char *argv[]) {
A aClass;
B bClass;
aClass.ValueA = "AClass";
bClass.ValueA = "BClass";
bClass.ValueB = "Blcass";
cout << aClass.ValueA <<endl;
cout << bClass.ValueA << endl;
cout << bClass.ValueB << endl;
A *baseBClass;
baseBClass = (A*) &bClass;
*baseBClass = aClass;
cout << aClass.ValueA <<endl;
cout << bClass.ValueA << endl;
cout << bClass.ValueB << endl;
cout << baseBClass->ValueA << endl;
return 0;
}
预期和实际结果:
aClass.ValueA = "AClass"
bClass.ValueA = "AClass"
bClass.ValueB = "BClass"
baseBClass->ValueA = "AClass"
我认为没有指针这是不可能的。我试过了
Ctype(bClass, A) = aClass
Directcast(bClass, A) = aClass
我收到此错误:
表达式是一个值,因此 不能作为任务的目标。
【问题讨论】:
-
我不明白你为什么要
bClass.ValueA = "AClass"。你确实设置了bClass.ValueA = "BClass" -
但是他设置了baseBClass = aClass,我想他打算将aClass.ValueA的值复制到bClass.ValueA中
标签: .net c++ inheritance