Опубликован: 19.08.2004 | Уровень: для всех | Доступ: платный | ВУЗ: Национальный исследовательский ядерный университет «МИФИ»
Лекция 8:

Концепция наследования и ее реализация в языке C#

< Лекция 7 || Лекция 8: 123 || Лекция 9 >

Исследовав основные свойства отношения наследования и способы его наглядной формализации, рассмотрим, каким образом эта теоретическая концепция реализуется в языках объектно-ориентированного программирования, и, в частности, в языке C#.

В простейшем случае язык программирования C# поддерживает единичное наследование. Проиллюстрируем реализацию механизма единичного наследования фрагментом программы на языке C#.

class A {
// базовый класс
	int a;
	public A() {...}
	public void F() {...}
}

class B : A {	
// подкласс (наследует свойства класса A, 
// расширяет класс A)
	int b;
	public B() {...}
	public void G() {...}
}

Применительно к языку программирования C# наследование есть отношение между классами. Данный пример содержит описание более общего (находящегося выше по ISA-иерархии ) класса A и его подкласса - класса B. Заметим, что находящийся выше по ISA-иерархии класс принято называть базовым, а находящийся ниже - производным (или подклассом).

Подкласс B наследует свойства класса A, и, кроме того, возможно, расширяет его новыми (по сравнению с классом A ) свойствами.

Приведенный фрагмент программы на языке C# иллюстрирует простейший случай наследования, а именно, единичное наследование.

Рассмотрим подробнее, каким образом производится реализация механизма наследования.

Производный класс B наследует свойство a и метод F() базового класса A. Кроме того, к свойствам производного класса B добавляется новое по сравнению с базовым классом A свойство b, а к методам - новый по сравнению с базовым классом A метод G().

Заметим, что операторы конкретизации элементов базовых классов (которые в языке C# называют конструкторами ) не наследуются производными классами. Отметим также, что некоторые из наследуемых методов могут игнорироваться. В ходе единичного наследования производный подкласс может наследовать свойства единственного базового класса. Множественное наследование, демонстрирующее гибкость механизмов наследования в языке C#, реализуется на основе интерфейсов. Хотя производный класс в языке программирования C# может наследовать свойства базового класса, он не может наследовать свойств структуры. Реализация механизма наследования (в том числе множественного ) для структур в языке программирования C# осуществляется (как и в случае с классами) посредством интерфейсов.

В случае неявного задания базового класса производный класс наследует свойства наиболее общего класса Microsoft .NET, известного как объект ( object ) и аналогичного концепту THING ("сущность") в рассмотренном ранее примере фреймовой нотации.

Для иллюстрации множественного наследования приведем фрагмент программы на языке C#, содержащей описание интерфейса:

public interface IList : 
	ICollection, IEnumerable	
{
	int Add (object value);	
	// методы
	bool Contains (object value);
	bool IsReadOnly {
		get;
	}
	// свойство
	object this [int index]{
		get;
		set;
	}
	// индексатор
}

Из приведенного примера видно, что фрагмент программы на языке C# представляет собой описание общедоступного интерфейса IList, наследующего в иерархии элементы интерфейсов ICollection и IEnumerable, а также содержащего методы Add и Contains, свойство IsReadOnly и объект-индексатор.

< Лекция 7 || Лекция 8: 123 || Лекция 9 >