У меня есть два класса. Базовый класс - A. Унаследованный класс - B. Я хотел бы скопировать базовый класс из одного объекта в базовый класс другого объекта, не затрагивая исходный класс. Однако .NET, похоже, игнорирует копирование. Разве это не возможно в .NET. Я знаю, что это возможно в C ++. Я включил код C ++, чтобы проиллюстрировать то, что я пытаюсь достичь.
Я понимаю, что в этом конкретном примере я могу напрямую назначить значение bClass.ValueA = aClass.ValueA. Но что, если у класса А были частные члены? Это было бы невозможно.
Примеры классов
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
Я получаю эту ошибку:
Выражение является значением и, следовательно, не может быть целью назначения.