2013-05-10 2 views
1

Когда класс D является производным от класса B, как его назначить только части B?Присвоить только классу базового класса

В C++, я хотел бы сделать:

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

Что такое C# эквивалент этого?

+0

Вы имеете в виду ключевое слово [base] (http://msdn.microsoft.com/en-us/library/hfw7t1ce.aspx)? – jbabey

ответ

1

если

class B {} 
class D : B {} 

затем D существу являетсяB с дополнительной функциональностью. В нем нет «части», которая равна B, ее is a B.

Так что это невозможно, как прямо, как вы пытаетесь сделать. Вам нужно будет выполнить функцию в D для себя, такую ​​как void Merge(B b), которая присваивает поля от B объектам (D) соответствующим base полям.

+0

Я предполагаю, что мне нужно узнать, что назначение объектов сильно отличается в C# - оно всегда назначает ссылку на объект, а не на содержимое объекта. – Suma

+0

@Suma Это только случай для классов, а не для структур. В случае типов значений (которые включают в себя определяемые пользователем структуры) переменные представляют собой значение самого объекта, как и в C++. Разница заключается в том, что в структурах C# нельзя наследовать ни что иное, как один общий базовый тип, поэтому C# предотвращает нарезку. – Servy

1

В C# нет эквивалента разрезания. Вам нужно будет вручную создать экземпляр базового класса и скопировать его по соответствующим свойствам. Если у базового класса был метод не виртуального клонирования (или конструктор копирования), вы могли бы использовать его, но вы не можете использовать срез, как на C++.

Смежные вопросы