2016-01-13 2 views
0

Я читаю книгу C# новичка. Все было гладкие объекты определяющих, как это:Как это называется на C#?

BaseClass foo = new BaseClass(); 

но затем автор, без каких-либо объяснений, изменило определение, как это:

MiClass foo = new DerivedClass(); 

Я хотел бы узнать об этом в книге или Интернете, но Я не знаю, какие слова использовать для поиска этой темы.

+3

Термин, который вы ищете, является «наследованием». –

+0

@GlorinOakenfoot 'inheritance': D –

+0

@ user3646717 вы также хотите поместить '()' после конструктора, иначе он не будет компилироваться. –

ответ

6

Термин для этого - subtyping, или замена.

Когда два типа имеют отношения наследования, один называется подтипа, а другой является супертипом. Если это применимо, то подтип может использоваться в контексте, где ожидался супертип (контекст являлся локальной переменной, полем, параметром и т. Д.).

Вот почему вы часто слышите, что inheritance обозначает is-a relationship. Сравните с composition (практика включения объекта как члена другого объекта), который обозначает отношение has-a (и это другой способ достижения code reuse при работе с классами).

Назад к наследованию, если ваши классы определены, как это, например:

class Banana : Fruit { ... } 

Мы бы сказали, что Banana (помимо того, что в Banana, очевидно) являетсяFruit, а также. Из-за этого отношения, вы можете сделать это, очевидно:

Banana obj = new Banana(); 

Но вы это делаете, а также:

Fruit obj = new Banana(); 

И вы можете сделать что-то подобное, когда поле или параметр метода ожидает Fruit.

Этот тип отношений полезен, если вы хотите, чтобы части вашего кода использовали объект, но вы не хотите, чтобы они знали слишком много деталей об этом объекте (возможно, потому, что эти данные неактуальны или могут быть изменены). Если эти части могут выполнять свою работу с менее конкретной информацией (в этом случае тот факт, что объект является каким-то образом Fruit, а не конкретно Banana), тогда предпочтительно, чтобы они работали с этим. Это форма decoupling, и это обычно желаемое свойство кода, поскольку проект становится все сложнее.

+0

Спасибо. Книга объяснила полиморфизм и наследование, но никогда не упоминала ничего о таком определении, как Fruit obj = new Banana(); Это то, что я даже не знал, как назвать. – user3646717

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