Язык программирования C#
- Муслимова А. Г.
- Уроки по языку программирования С#
- Просмотров: 9209
Язык С#. Наследование. Класс 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");
}
}
}