Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 2. Наследование.doc
Скачиваний:
5
Добавлен:
15.11.2019
Размер:
273.92 Кб
Скачать

25

Лекция 2. С# и объектно-ориентированное программирование Формальное определение класса в с#

Класс в С#, как и в других языках программирования, — это пользовательский тип данных (user defined type, UDT), который состоит из данных (часто называемых атрибутами или свойствами) и функциями для выполнения с этими данными различных действий (эти функции обычно называются методами). Классы позволяют группировать в единое целое данные и функциональность, моделируя объекты реального мира. Именно это свойство классов и обеспечивает одно из наиболее важных преимуществ объектно-ориентированных языков программирования

К примеру, предположим, что нам потребовалось создать модель сотрудника нашей организации. Конечно же, для этой цели удобнее всего создать специальный класс. Этот класс, как минимум, должен хранить данные об имени работника, его идентификационном номере и текущей заработной плате. Помимо этого, пусть в нашем классе будут определены два метода — GiveBonus( ) для увеличения заработной платы сотрудника и DisplayStats ( ) для вывода всех имеющихся данных of этом сотруднике (рис. 3.1).

Рис. 3.1. Определение простого класса

Как уже говорилось в главе 2, для классов СП можно определить любое количество конструкторов. Эта, специальные методы классов позволяют создавать объекты данного класса, настраивая при этом их исходное состояние нужным вам образом. Любой класс С# автоматически снабжается конструктором по умолчанию (не принимающим никаких параметров). Этот конструктор в С# (в отличие от C++) при создании объекта автоматически присвоит всем переменным-членам класса безопасные значения по умолчанию. Кроме того, вы можете как переопределить конструктор по умолчанию, так и создать такое количество пользовательских конструкторов (принимающих параметры), сколько вам необходимо. Давайте определим наш класс для сотрудника на С#:

// Исходное определение класса

class Employee

{

// Внутренние закрытые данные класса

private string fullNameж

private int empID;

private float currPay;

// Конструкторы

public Employee( ) { }

public Employee(string fullName, int empID, float currPay)

{

this.fullName = fullName;

this.empID = empID;

this.currPay = currPay;

}

// Метод для увеличения зарплаты сотрудника

public void CiveBonus(float amount)

{ currPay += amount; }

// Метод для вывода сведений о текущем состоянии объекта

public virtual void DisplayStats( )

{

Console.WriteLine(“Name:{0}, fullName);

Console.WriteLine("Pay: {0}", currPay);

Console.WriteLine(“ID: {0}", empID);

Console.WriteLine(“SSN:{0}", ssn);

}

}

Обратите внимание на то, что определение для конструктора по умолчанию не содержит каких-либо действий, которые должен выполнять конструктор:

class Employee

{

// Всем переменным-членам значения по умолчанию

// будут присвоены автоматически

public Employee( ) {}

. . . .

} '

Необходимо обязательно помнить о следующем обстоятельстве: в С# (как и в C++), если вы определили хотя бы один пользовательский конструктор (примающий параметры), конструктор по умолчанию автоматически создаваться уже будет и его придется определять явно. В противном случае при попытке выполнения такого, к примеру, кода:

// Вызываем конструктор по умолчанию

Employee е = new Employee( );

Вы получите сообщение об ошибке компилятора.

Использование пользовательского конструктора очевидно:

// Вызываем пользовательский конструктор (двумя способами)

public static void Main( )

{

Employee e = new Employee("Joe", 80, 30000);

e.GiveBonus(200);

Employee e2;

e2 = new Employee("Beth”, 81, 50000);

e2.GiveBonus(1000);

e2.DisplayStats( );

}