Когда класс D является производным от класса B, как его назначить только части B?Присвоить только классу базового класса
В C++, я хотел бы сделать:
D d;
B b;
d.B::operator = (b);
Что такое C# эквивалент этого?
Когда класс D является производным от класса B, как его назначить только части B?Присвоить только классу базового класса
В C++, я хотел бы сделать:
D d;
B b;
d.B::operator = (b);
Что такое C# эквивалент этого?
если
class B {}
class D : B {}
затем D
существу являетсяB
с дополнительной функциональностью. В нем нет «части», которая равна B
, ее is a B
.
Так что это невозможно, как прямо, как вы пытаетесь сделать. Вам нужно будет выполнить функцию в D
для себя, такую как void Merge(B b)
, которая присваивает поля от B
объектам (D
) соответствующим base
полям.
Я предполагаю, что мне нужно узнать, что назначение объектов сильно отличается в C# - оно всегда назначает ссылку на объект, а не на содержимое объекта. – Suma
@Suma Это только случай для классов, а не для структур. В случае типов значений (которые включают в себя определяемые пользователем структуры) переменные представляют собой значение самого объекта, как и в C++. Разница заключается в том, что в структурах C# нельзя наследовать ни что иное, как один общий базовый тип, поэтому C# предотвращает нарезку. – Servy
В C# нет эквивалента разрезания. Вам нужно будет вручную создать экземпляр базового класса и скопировать его по соответствующим свойствам. Если у базового класса был метод не виртуального клонирования (или конструктор копирования), вы могли бы использовать его, но вы не можете использовать срез, как на C++.
Вы имеете в виду ключевое слово [base] (http://msdn.microsoft.com/en-us/library/hfw7t1ce.aspx)? – jbabey