Наследование
Конструктор сайтов - uCoz
Меню сайта


Поиск по сайту
Loading


Форма входа


Помощь проекту

PayPal:

LiqPay or Credit/Debit Card:

W1 "Единый кошелек":
199990419310
WebMoney:
WME - E509190786817
WMZ - Z195499640086
WMU - U204403357554
WMR - R280087882619




Активные темы

  • Все вопросы касающиеся Neil Scope (6423)
  • Продам плату Neil Scope 3 rev 3.2 (1)
  • Заказ плат под NeilScope3 (12.2015) (59)
  • Первое знакомство с микроконтроллерами Silabs (105)
  • инвертор на микропроцессоре с 12\220v с синусом на выходе (2)
  • Куплю плату NS-3 (0)
  • Подскажите (0)
  • Осваиваем LPC2478... (1)
  • Мелкие вопросы по МК51 от SiLabs-a.. (40)
  • Детали для Neil Scope 2 (0)



  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0



    Рекомендуемые браузеры: Mozzilla, Google Chrome






    Приветствую Вас, Пробегающий мимо · RSS 22.09.2017, 04:46

    Основы C#. Урок 12. Наследование

    Представьте себе, что у нас есть некоторый класс (быть может весьма большой), который почти подходит для нашей конкретной задачи. Почти, но не совсем. Что-то (некоторые методы) в этом классе надо изменить, что-то - добавить. Наследование как раз и служит для этого. При наследовании мы объявляем наш класс потомком другого класса. И наш класс-потомок (или, как его еще называют, дочерний класс) автоматически приобретает всё, что было в родительском классе. Это мы делаем буквально парой строчек. Затем в дочерний класс мы можем что-нибудь добавить (чего не было в классе родительском). Кроме того, в дочернем классе мы можем что-нибудь из родительского класса переопределить - так что оно уже будет работать по-другому.

    Давайте рассмотрим это все на примере. У нас будет класс Worker и производный от него класс Boss. Класс Boss будет отличаться от класса Worker во-первых, наличием переменной numOfWorkers (для количества подчиненных) и, во вторых, метод для задания возраста (setAge) будет работать в Boss не так:

    using System;
    namespace test
    {
     //Класс Worker
     class Worker
     {
     protected int age=0;
     public void setAge(int age)
     {
     if(age>0 && age<100)
     this.age=age;
     else
     this.age=0;
     }
     public int getAge()
     {
     return age;
     }
     }
     //Класс Boss
     class Boss : Worker{
     public int numOfWorkers; //Количество подчиненных
     public new void setAge(int age)
     {
     if(age>0 && age<45)
     this.age=age;
     else
     this.age=0;
     }
     }
     class Test
     {
     static void Main(string[] args)
     {
     Worker wrk1 = new Worker();
     Boss boss = new Boss();
     wrk1.setAge(50);
     boss.setAge(50);
     boss.numOfWorkers=4;
     Console.WriteLine("Возраст работника "+wrk1.getAge());
     Console.WriteLine("Возраст босса "+boss.getAge()+
    ".\nКоличество подчиненных "+boss.numOfWorkers);
     }
     }
    }

    Обратите внимание, как мы вводим новый класс Boss:

     ...
     class Boss : Worker{
     ...

    Такая запись и означает, что новый класс Boss будет потомком другого класса (Worker в данном случае). Так как наш класс - потомок другого класса, то он автоматически умеет все тоже самое, что и родительский класс. В частности, в нем есть переменная age для хранения возраста. Далее, в класс Boss мы вводим переменную numOfWorkers для хранения количество подчиненных у нашего босса. В родительском классе такой переменной не было. Кроме того, нас не устроила реализация метода setAge из родительского класса Worker (по каким-то там внутренним инструкциям фирмы возраст босса не может превышать 45 лет, тогда как возраст работника не может превышать 100), поэтому мы просто написали в классе Boss метод с таким же именем. Обратите внимание на слово new при объявлении метода:

     ...
     public new void setAge(int age)
     ...

    Таким образом мы в производном классе можем что-нибудь добавлять и что-нибудь изменять по отношению к классу родительскому. Обратите внимание, что убирать что-нибудь, полученное в наследство от родительского класса, мы не можем.

    При запуске наша программа даст вполне ожидаемый результат - в возраст работника запишется 50, в возраст босса - 0.