Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

c# / C#. slsg 10. ngxrlkuigtol

.pdf
Скачиваний:
37
Добавлен:
21.03.2016
Размер:
867.42 Кб
Скачать

Тема 10. Наследование

Наследование классов

Реализация методов

Запечатанные классы

Использование интерфейсов

Использование абстрактных классов

Часть 1

 

 

 

 

Синтаксис

 

 

 

User

 

class User

 

{

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

class Manager : User

Manager

 

 

 

 

{

 

 

 

 

 

 

}

Наследуемый класс получает от базового класса большинство его элементов

Наследуемый класс не может быть более доступным по сравнению с базовым классом

Наследуемые защищённые члены (имеющие модификатор доступа protected) неявно являются защищёнными и в классе-наследнике

Методы класса-наследника могут получать доступ только к наследуемым защищённым членам своего класса-предка

Модификатор доступа protected не может применяться в структурах

class User

{

protected string name;

}

class Manager : User

{

public string GetName()

{

return name;

}

}

class Program

{

public void Try(User user)

{

user.name = "Vasya"; // Ошибка компиляции

}

}

Определения конструкторов для вызова конструктора базового класса должны использовать ключевое слово base

class User

{

protected User(string name) { }

}

class Manager : User

{

Инициализатор

конструктора

public Manager(string name) : base(name) { }

}

Если конструктор класса-наследника явно не вызывает конструктор классапредка, то компилятор неявно добавляет инициализатор конструктора базового класса

К частному конструктору (имеющему модификатор доступа private) нельзя обращаться из класса-наследника

Для разрешения столкновения областей видимости используйте ключевое слово base

Часть 2

Виртуальные методы являются полиморфическими

Виртуальные методы обязаны быть не пустыми

class User

{

public virtual string GetName()

{

...

}

public virtual void SetName(

string name); // Ошибка компиляции

}

Для использования виртуальных методов

Недопустимо определять статические виртуальные методы

Недопустимо определять частные виртуальные методы