Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ЛИПО .doc
Скачиваний:
0
Добавлен:
06.12.2018
Размер:
441.86 Кб
Скачать

Синтаксис наследования.

Синтаксис для получения производного класса из базового показан в синтаксичес­ком блоке В заголовке производного класса указаны все необязательные специфи­каторы, за которыми следует ключевое слово class и имя класса. Важно при этом двое­точие (:), за которым следует имя базового класса. Его смысл эквивалентен "является производным от" или "наследует от".

Определение_класса_с_необязательным_наследованием::= [<Спецификатор_доступности>] class <Имя_производного_класса> [ : <Имя_базового_класса>]

{

<Элементы_производного_класса>

}

using System;

class Student

{

private string name;

private string surname;

private byte age=0;

public string Name

{

get

{

return name;

}

set

{

name=value;

}

}

public string Surname

{

get

{

return surname;

}

set

{

surname=value;

}

}

public byte Age

{

get

{

return age;

}

set

{

age=value;

}

}

class GraduateStudent:Student

{

private byte min;

public byte GraduateStudentMIN

{

get

{

return min;

}

set

{

min=value;

}

}

}

class Test

{

public static void Main()

{

Student Student1=new Student();

GraduateStudent GraduateStudent1=new GraduateStudent();

Student1.Name="Джон";

Student1.Surname="Матвеев";

Student1.Age=20;

Console.WriteLine("Имя: {0} Фамилия: {1} Возраст: {2}", Student1.Name, Student1.Surname, Student1.Age);

GraduateStudent1.Name="Алексей";

GraduateStudent1.Surname="Лосев";

GraduateStudent1.Age=26;

GraduateStudent1.GraduateStudentMIN=14;

Console.WriteLine("Имя: {0} Фамилия: {1} Возраст: {2} Кандидатский минимум: {3}", GraduateStudent1.Name, GraduateStudent1.Surname, GraduateStudent1.Age, GraduateStudent1.GraduateStudentMIN);

Console.ReadLine();

}

} }

Типы наследования

Сущест­вуют два различных типа наследования: наследование реализации и наследование интерфейса.

Наследование реализации (implementation inheritance) означает, что тип происходит от базового типа, получая от него все поля-члены и функции. При наследовании реализации производный тип адаптирует реализацию каждой функции базового типа, если только в его определении не указано, что реали­зация функции должна быть переопределена. Такой тип наследования более полезен, когда нужно добавить функциональность существующему типу, или же когда несколько связанных типов разделяют существенный объем общей функциональности. Хороший пример — набор классов Windows Forms, наряду с базовым классом System.Windows.Forms.Control, который представляет очень сложную реализацию общего элемента управления Windows, и многочисленными другими классами, такими как System.Windows.Forms.TextBox и System.Windows.Forms.ListBox, унас­ледованными от Control и переопределяющими его функции или опреде­ляющими новые функции для реализации специальных элементов управления.

Наследование интерфейса (interface inheritance) означает, что тип наследует только сигнатуру функций, но не наследует никакой реализации. Этот тип на­следования наиболее полезен, когда нужно специфицировать, что тип обеспе­чивает доступ к определенным средствам. Например, для некоторых типов может быть указано, что они представляют метод очистки ресурсов, называе­мый Dispose(), за счет того, что наследуют интерфейс System.Idisposable. Поскольку способ, которым один тип очищает ресурсы, скорее всего, будет очень отличаться от способа очистки ресурсов, используемого другим типом, нет смысла определять никакой общей реализации, а потому в данном случае подходит наследование интерфейса. Наследование интерфейса часто трактуется как выполнение контракта: наследуя интерфейс, тип берет на себя обязанность представить клиентам определенную функциональность.