Наследование. Простой класс

Содержание

Слайд 2

НАСЛЕДОВАНИЕ

Наследование (inheritance) является одним из ключевых моментов ООП. Его смысл состоит в

НАСЛЕДОВАНИЕ Наследование (inheritance) является одним из ключевых моментов ООП. Его смысл состоит
том, что мы можем расширить функциональность уже существующих классов за счет добавления нового функционала или изменения старого.

Слайд 3

ПРОСТОЙ КЛАСС

class Person
{
private string _name;
public string Name
{
get { return _name; }
}
}

Класс представляет

ПРОСТОЙ КЛАСС class Person { private string _name; public string Name {
обычную модель человека
Только имя, ну и пусть

Слайд 4

КЛАСС РАБОТНИК

class Employee : Person
{
}

Теперь класс Employee «Является» человеком. То есть мы

КЛАСС РАБОТНИК class Employee : Person { } Теперь класс Employee «Является»
можем работать с классом Employee так же, как и с Person

Слайд 5

ПРИМЕР

static void Main(string[] args)
{
     Person p = new Person { FirstName =

ПРИМЕР static void Main(string[] args) { Person p = new Person {
"Bill", LastName = "Gates" };
  p.Display();
     p = new Employee { FirstName = "Denis", LastName = "Ritchi" };
     p.Display();
     Console.Read();
}

И поскольку объект Employee является также и объектом Person, то мы можем так определить переменную:
Person p = new Employee().

Слайд 6

ОГРАНИЧЕНИЯ НАСЛЕДОВАНИЯ

Не поддерживается множественное наследование, класс может наследоваться только от одного класса.

ОГРАНИЧЕНИЯ НАСЛЕДОВАНИЯ Не поддерживается множественное наследование, класс может наследоваться только от одного
Хотя проблема множественного наследования реализуется с помощью концепции интерфейсов, о которых мы поговорим позже.
При создании производного класса надо учитывать тип доступа к базовому классу - тип доступа к производному классу должен быть таким же, как и у базового класса, или более строгим. То есть, если базовый класс у нас имеет тип доступа internal, то производный класс может иметь тип доступа internal или private, но не public.
Если класс объявлен с модификатором sealed, то от этого класса нельзя наследовать и создавать производные классы. Например, следующий класс не допускает создание наследников

Слайд 7

ОБРАЩЕНИЕ К ПОЛЯМ РОДИТЕЛЯ

Мы не можем обратиться к приватным полям родителя, можем

ОБРАЩЕНИЕ К ПОЛЯМ РОДИТЕЛЯ Мы не можем обратиться к приватным полям родителя,
обращаться только к public, protected, internal, protected internal

class Employee : Person
{
    public void Display()
    {
        Console.WriteLine(_firstName);
    }
}

Слайд 8

КЛЮЧЕВОЕ СЛОВО BASE

Слово base используется для доступа к полям и методам класса

КЛЮЧЕВОЕ СЛОВО BASE Слово base используется для доступа к полям и методам
– родителя.
К его конструкторам, поведению.

Слайд 9

ДОБАВИМ КОНСТРУКТОР В PERSON

public Person(string name)
{
_name = name;
}

ДОБАВИМ КОНСТРУКТОР В PERSON public Person(string name) { _name = name; }

Слайд 10

ВЫЗОВ БАЗОВОГО КОНСТРУКТОРА

class Employee : Person
{
public string Company {get; set;}
public

ВЫЗОВ БАЗОВОГО КОНСТРУКТОРА class Employee : Person { public string Company {get;
Employee(string name, string company) : base(name)
{
Company = company;
}
}


Слайд 11

Соответственно, если мы в базовом классе создали конструктор с параметрами, мы в

Соответственно, если мы в базовом классе создали конструктор с параметрами, мы в
производных конструкторах всегда должны его вызывать.
Конструктор без параметров, если он есть, выполнится сам, без нашего вмешательства

Слайд 12

ПОЛИМОРФИЗМ

Полиморфизм является третьим ключевым аспектом объектно-ориентированного программирования и предполагает способность к изменению

ПОЛИМОРФИЗМ Полиморфизм является третьим ключевым аспектом объектно-ориентированного программирования и предполагает способность к
функционала, унаследованного от базового класса. Полиморфизм предполагает определение полиморфного интерфейса в базовом классе - набор членов класса, которые могут быть переопределены в классе-наследнике. Методы, которые мы хотим сделать доступными для переопределения, в базовом классе помечается модификатором virtual. Такие методы называют виртуальными. Они и представляют полиморфный интерфейс.

Слайд 13

ДОПУСТИМ В БАЗОВОМ КЛАССЕ ЕСТЬ МЕТОД ВИРТУАЛЬНЫЙ

class A
{
public virtual void Smth(int arg)
{
Console.WriteLine(“Base: ”

ДОПУСТИМ В БАЗОВОМ КЛАССЕ ЕСТЬ МЕТОД ВИРТУАЛЬНЫЙ class A { public virtual
+ arg);
}
}