Наследяването (Ръководство за програмиране C #), Microsoft документи

В тази статия,

Наследство, заедно с капсулиране и полиморфизъм е един от трите основни характеристики на обектно-ориентирано програмиране. Наследяването позволява да създавате нови класове, които повторно използване, разширяване и модифициране на поведението е определено в друг клас. Класът, чиито членове са наследени се нарича базов клас. клас, който наследява тези членове се нарича получен клас. Полученият клас може да има само един директен база клас. Въпреки това, наследството е преходен. Ако ClassC клас произлиза от ClassB и ClassB се извлича от Класа, ClassC наследява членовете обявени в ClassB и Класа.

забележка

Структурите не поддържат наследство, но могат да се реализират интерфейси. За повече информация, вижте. Под интерфейси.

Концептуално, получен клас е специализация на базовия клас. Например, с база животните клас, може да има един получен клас наречен бозайник. и един от получен клас наречен влечуги. Бозайник е животно и влечуги е животно. но всеки получен клас е различни специалности на базовия клас.

При определяне на класа, за да наследя от друг клас, получени клас е ясно получава всички членове на базовия клас, с изключение на дизайнери и техники за приключване. А, получен по този начин може клас повторно използване код в базовия клас, без да го повторно прилагане. Извлечения клас да добавите повече членове. По този начин, получен клас разширява функционалността на базовия клас.

Следващата фигура показва класа WorkItem. представляваща работа елемент в бизнес процеса. Подобно на други класове, той се извлича от System.Object и наследява всички свои методи. В WorkItem има пет от собствените си членове. Сред тях са конструктор, като конструкторите не са наследени. ChangeRequest клас наследява от WorkItem и представлява особена гледна точка на член на работа. ChangeRequest добавя двама членове на членовете наследени от WorkItem и обект. Трябва да добавите свой собствен конструктор, а също така добавя originalItemID. originalItemID имот позволява ChangeRequest свързаните случаи с оригиналния обект WorkItem. към които се прилага искането за промяна.

Следният пример показва как да се изразят в класа отношения C #, както е показано в предишната фигура. Примерът показва как WorkItem отменя един виртуален метод и как Object.ToString ChangeRequest WorkItem клас наследява прилагането на метода.

Абстрактни и виртуални методи

Когато един базов клас декларира метод като виртуална. извлечен клас може да има предимство на метода с помощта на собствената си реализация. Ако базовия клас декларира член като абстрактно. този метод трябва да бъде отменено във всеки не-абстрактен клас, който наследява директно от този клас. Ако получени клас по себе си е абстрактен, той наследява абстрактни членове, без да ги изпълняват. Абстрактни и виртуални членове са в основата на полиморфизъм, което е втората голяма черта на обектно-ориентираното програмиране. За повече информация, вижте. Полиморфизъм в секцията.

Абстрактни базови класове

Можете да декларира клас като абстрактен. ако искате да се предпазите от директно на инстанция, като се използва нова ключова дума. С този подход, в класа може да се използва само ако новият клас се извлича от него. Абстрактен клас може да съдържа една или повече метода подписи, които са се обявили за абстрактно. Тези подписи определят параметрите и връщане стойност, но нямат никаква реализация (метод на тялото). Абстрактни класове не са непременно съдържат абстрактни членове; Въпреки това, ако в класа все още съдържа абстрактен член, на самия клас трябва да бъдат декларирани като абстрактно. Определени класове, които от своя страна не са абстрактни, трябва да осигуряват изпълнението на всички абстрактни методи в абстрактен базов клас. За допълнителна информация. Вижте Абстрактни и запечатани уроци и членовете на групата.

интерфейси

Интерфейсът е препратка тип в нещо подобно на абстрактен базов клас, който съдържа само абстрактни членове. Ако клас изпълнява интерфейс, класът трябва да осигури изпълнението на всички членове на интерфейса. В един клас на множество интерфейси могат да бъдат приложени, въпреки че могат да бъдат получени само от един клас директно база.

Интерфейси се използват за определяне на специфични възможности за класове, които не е задължително да имат връзка с идентичността. Например, System.IEquatable интерфейс може да се изпълнява от всеки клас или структура, включително и кода на клиента, за да се определи еквивалентността на двата вида обекти (въпреки това, определя типа на равностойност). IEquatable Това не означава същия тип идентичност на връзка, която съществува между основата и производни класове (например, бозайникът е животните). За повече информация, вижте. Член интерфейси.

Предотвратяване на допълнително наследство

А клас може да попречи на наследството от други класове или наследство от някой от неговите членове, се обявява членове или запечатани. За допълнителна информация. Вижте Абстрактни и запечатани уроци и членовете на групата.

Крие получени членове клас основни класа