Перегрузка

Часто бывает удобно, чтобы методы, реализующие один и тот же алгоритм для различных типов данных, имели одно и то же имя.

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

Допустим, имеется четыре варианта метода, определяющего наибольшее значение:

// Возвращает наибольшее из двух целых:

int max(int a, int b)

{ … }

// Возвращает наибольшее из трех целых:

int max(int a. int b, int с)

{ … }

// Возвращает наибольшее из первого параметра и длины второго:

i int max (int a, string b)

{ … }

// Возвращает наибольшее из второго параметра и длины первого:

int max (string b, int a)

{ … }

Console.WriteLine(max(1. 2));

Console.WriteLineC max(1, 2, 3));

Console.WriteLineC max(1, "2"));

Console.WriteLineC max("1". 2));

При вызове метода max компилятор выбирает вариант метода, соответствующий типу передаваемых в метод аргументов (в приведенном примере будут последовательно вызваны все четыре варианта метода).

Классы

Для представления объектов в языках С# используется понятие класс, аналогичное обыденному смыслу этого слова в контексте «класс членистоногих», «класс млекопитающих», «класс задач» и т. п. Класс является обобщенным понятием, определяющим характеристики и поведение некоторого множества конкретных объектов этого класса, называемых экземплярами класса. Описание класса содержит ключевое слово class, за которым следует его имя, а далее в фигурных скобках — тело класса, то есть список его элементов. Кроме того, для класса можно задать его базовые классы (предки) и ряд необязательных атрибутов и модификаторы, определяющих различные характеристики класса.

[ атрибуты ] [ модификаторы ] class имя_класса [: предки ]

{

тело_класса

}

В теле класса могут быть объявлены:

- константы;

- поля;

- конструкторы и деструкторы;

- методы;

- свойства;

- индексаторы;

- операции;

- события;

- делегаты;

- классы (структуры, интерфейсы, перечисления)

В данной лабораторной рассмотрим два модификатора доступа, которые могут применяться к классу или его членам:

public (общий, открытый) - доступ к классу или членам класса не ограничен;

private (закрытый) - доступ к членам класса можно получить только из других членов того же класса. Доступ к классу можно получить только из элементов класса, внутри которого описан данный класс (используется для вложенных классов).

Если модификатор доступа не указан, по умолчанию используется private.

Конструктор предназначен для инициализации объекта. Он вызывается автоматически при создании объекта класса с помощью операции new. Имя конструктора совпадает с именем класса.

В данном примере класс Person содержит два открытых поля name и surname, два закрытых поля – age и salary. Как к закрытым членам, к ним нельзя получить доступ кроме как через методы членов. Для получения управляемого доступа к закрытым членам можно использовать методы с именем GetAge и GetSalary. Также в классе есть два открытых конструктора: первый инициализирует поле age, второй – поля name, surname, age.

public class Person

{

public string name;

public string surname;

private byte age;

int salary = 0;

public int GetSalary()

{

return salary;

}

public byte GetAge()

{

return age;

}

public void IncreaseSalary(int inc)

{

salary += inc;

}

public Person(byte age)

{

this.age = age;

}

public Person(string name, string surname, byte age)

{

this.name = name;

this.surname = surname;

this.age = age;

}

}

Создать экземпляр класса можно с помощью операции new, например:

Person employee = new Person(20); // создание экземпляра класса Person

Person director = new Person("Петр", "Петров", 40); // создание другого экземпляра класса Person

Ниже приведен пример работы с классом Person:

static public void WritePersonInf(Person pers)

{

Console.WriteLine("Фамилия = {0}, Имя = {1}, Возраст = {2}, Зарплата = {3}", pers.surname, pers.name, pers.GetAge(), pers.GetSalary());

}

static void Main(string[] args)

{

Person employee = new Person(20);

Person director = new Person("Петр", "Петров", 40);

employee.name = "Иван";

employee.surname = "Иванов";

WritePersonInf(employee);

employee.IncreaseSalary(10000);

WritePersonInf(employee);

director.IncreaseSalary(20000);

WritePersonInf(director);

}

Результат работы программы:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: