Top.Mail.Ru

Язык С#. Наследование. Класс Manager (пример)

Наследование - создание нового класса на базе уже имеющегося, или базового класса. Принцип наследования состоит в том, что элементы данных  и методы базового класса автоматически становятся элементами данных нового класса. Класс в С# может иметь только одного предка.

 1. Механизм наследования позволяет реализовать принцип эффективного программирования: написанный код можно многократно использовать. Методы базового или родительского класса могут использоваться объектами всех классов потомков.

2. Наследование реализует принцип программирования от «простого к сложному» или от общего к частному.  При этом базовый класс реализует только самые общие и простые методы, описывающие поведение всех объектов, а каждый производный класс лишь добавляет специфические особенности.

 class имя_класса : имя_класса_родителя

{ тело_класса}

 При создании конструктора производного класса:

  • сначала вызывается конструктор базового класса, а затем вызывается конструктор текущего класса
  • Для вызова конструктора базового класса используется ключевое слово base
  • если базовый класс имеет несколько конструкторов, то необходимый указывается при определении конструктора производного класса;
  • если конструктор базового класса имеет параметры, то они включаются в список параметров производного класса.
  • Используя ключевое слово base можно вызвать метод или поле родительского класса, если оно имеет уровень доступа public

ПРИМЕР

Создайте базовый класс Person. Класс должен содержать следующие поля:

  • имя служащего  (fam)
  • номер служащего  (tab)
  • оклад служащего (salary) - должен быть в диапазоне: от 13000 до 17000.

 В классе необходимо реализовать:

  • Конструктор
  • Свойства: Fam, Tab,  Salary.

Создайте производный класс Manager, который добавляет следующие поля в класс Person

  • наименование компании, в которой работает менеджер (company)
  • объем продаж менеджера (sale)

Класс должен содержать  конструктор и следующие методы:

  • cвойства: Company, Sale
  • свойство  -   вычисление размер премии -  5% от объема продаж
  • метод, обеспечивающий вывод значений полей двух классов на экран монитора

Напишите программу, демонстрирующую работу с этими классами.

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 namespace MyPerson

{

    class Person

    {

        string fam;     // поле фамилия

        int salary;     // поле зарплата

        int tab;        // поле табельный номер

         public Person(string Fam, int Tab, int Salary)  //конструктор с параметрами

        {

            fam = Fam;

            tab = Tab;

            salary = Salary;

       }

        public Person() { }         // конструктор по умолчанию

         public string Fam  //свойство для поля фамилия

        {

            set { if (fam == null) fam = value; }     //код - установка значения поля фамилия

            get { return fam; }                       //код - чтение значения поля  фамилия

        }

         public int Tab        //свойство для поля табельный номер

        {

            set { tab = value; }    //код - установка значения поля табельный номер

            get { return (tab); }       //код - чтение значения поля  табельный номер

        }

         public int Salary  //свойство для поля зарплата

        {

            get { return salary; }     //код - чтение поля зарплата

            set {   if ((value > 13000) && (value < 17000)) salary = value; }   //код - установка с проверкой поля зарплата

        }

   }

     class Manager : Person  //создаем класс-наследник Manager, для которого базовым является Person

    {

        string company;     // поле  название комании

        int sale;           // поле  объем продаж

         public Manager() { }  // конструктор по умолчанию

        // конструктор класса-наследника с параметрами

        public Manager(string Fam, int Tab, int Salary, string Company, int Sale)

            : base(Fam, Tab, Salary)

        {

            company = Company;

            sale = Sale;

        }

         public string Company      //свойство для поля название компании

        {

            set { if (company == null) company = value; } //код - установка поля название компании 

            get { return company; }                      //код - чтение поля название компании    

        }

         public int Sale     //свойство для поля объем продаж

        {

            set {  sale = value; }   //код - установка значения поля объем продаж  

            get { return (sale); }   //код - чтение поля объем продаж

        }

        public double Bonus   //свойство для подсчета премии от объема продаж

        {

            get { return sale * 0.05; }

        }

        public void Show()  // метод вывода значений всех полей

        {

            Console.WriteLine("Фамилия " + base.Fam);  

            Console.WriteLine("Табельный номер " + base.Tab);

            Console.WriteLine("Зарплата " + base.Salary);

            Console.WriteLine("Компания " + company);

            Console.WriteLine("Объем продаж " + sale);

            Console.WriteLine("Бонус " + Bonus);

            double sum = Bonus + base.Salary;

            Console.WriteLine("Общая сумма зарплаты " + sum );

        }

     }

    class Program

    {

        static void Main(string[] args)

        {

            int n = 0, i;

            //---------------------------------------------------------------------

             // пример создания объекта с помощью конструктора с параметрами

            Console.WriteLine("Пример создания объекта с помощью конструктора с параметрами:");

            Manager m = new Manager("Иванов", 101, 20000, "Эльдорадо", 500000);

            m.Show();

            //-------------------------------------------------------------------

 

           Manager[] pr = new Manager[10];       //объявляем массив на 10 объектов класса Manager

            for (i = 0; i < 10; i++)

             pr[i] = new Manager();

            

            String s, subkey, key;

                do                               // выводим меню для работы с программой

                {

                    Console.WriteLine("***Меню***");

                    Console.WriteLine("1 - Ввод данных");

                    Console.WriteLine("2 - Вывод данных");

                    Console.WriteLine("3 - Поиск данных по табельному номеру");

                    Console.WriteLine("4 - Выход");

                    Console.WriteLine();

                    Console.WriteLine("Ваш выбор...");

                    key = Console.ReadLine();

                     switch (key)

                    {

                    case "1":         // ввод данных выполняется через соответствующие свойства

                     do

                        {

       Console.WriteLine("Введите фамилию: ");

       s = Console.ReadLine(); pr[n].Fam = s;

       Console.WriteLine("Введите табельный номер: ");

       s = Console.ReadLine(); pr[n].Tab = int.Parse(s);

       Console.WriteLine("Внимание! Зарплата должна быть в пределах от 13000 до 17000 ");

       Console.WriteLine("Введите зарплату: ");

       s = Console.ReadLine(); pr[n].Salary = int.Parse(s);

       Console.WriteLine("Введите организцию: ");

       s = Console.ReadLine(); pr[n].Company = s;

       Console.WriteLine("Введите объем продаж: ");

      s = Console.ReadLine(); pr[n].Sale = int.Parse(s);

                     n++;                    // количество инициализорованных объектов

                 Console.WriteLine("Продолжить?(Y/N)...");

                         subkey = Console.ReadLine();

                            } while ((subkey == "y") || (subkey == "Y")); break;

                      case "2":               // вывод данных

                            for (i = 0; i < n; i++)

                            {

                                pr[i].Show();

                                Console.WriteLine();

                            } break;

                      case "3":             // поиск данных по табельному номеру

                            {

                                bool tr = true;

                                Console.WriteLine("Введите табельный номер: ");

                                s = Console.ReadLine(); int num = int.Parse(s);

                                for (i = 0; i < n; i++)

                                    if (pr[i].Tab == num)

                                    {

                                        Console.WriteLine("Фамилия={0}, таб. номер={1}, бонус={2}",

                                         pr[i].Fam, pr[i].Tab, pr[i].Bonus);

                                        tr = false;

                                        Console.WriteLine();

                                    }

                             if (tr) Console.WriteLine("С таким табельным номером нет человека!");

                                Console.WriteLine();

                            } break;

                    }

                } while (key != "4");

             }

         }

    }