.NET: Базовый класс изменения наследования (преобразование C ++)

У меня есть два класса. Базовый класс - 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

Я получаю эту ошибку:

Выражение является значением и, следовательно, не может быть целью назначения.

1
задан 5 September 2010 в 02:06
поделиться