Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
-C#_Lec14_OOP-1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
315.39 Кб
Скачать

9.5. Члены классов

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

Пример 14.3.

using System;

namespace ClassDemo

{ public class Human

{ private string HumanName = ""; // Определение поля Имя

private short HumanAge = 0; // Определение поля Возраст

// Объявление событий (2-стр.82), уведомляющих о смене имени и возраста

// public event NameChangedEventHandler NameChanged(string NewNameValue);

// public event AgeChangedEventHandler AgeChanged(short NewAgeValue);

public string Name // Определение свойства Имя

{ get

{ return HumanName; // Возврат значения, хранимого в поле

}

set //(string Value)

{ HumanName = value; // Сохранение значения в поле

// Рассылка события смены имени

// NameChanged(HumanName);

}

}

public short Age // Определение свойства Возраст

{ get

{ return HumanAge; // Возврат значения, хранимого в поле

}

set //(short Value)

{ if (value < 0 | value > 200)

{ // Вывод сообщения об ошибке изменения возраста

Console.WriteLine("Возраст должен быть между " +

"0 и 200 годами.");

}

else

if (HumanAge != value)

{ HumanAge = value; // Сохранение значения в поле

// Рассылка события смены возраста

// AgeChanged(HumanAge);

}

}

}

public void OutputName() // Определение метода вывода имени

{ Console.WriteLine(HumanName);

}

}

public class HumanDemo

{ // private void SomeNameChanged(string name)

// { // Обработка события смены имени

// Console.WriteLine("Имя изменено на " + name);

// }

// private void SomeAgeChanged(short age)

// { // Обработка события смены возраста

// Console.WriteLine("Возраст изменен на " + age.ToString());

// }

static void Main() // Точка входа в программу

{ Human h = new Human(); // Создание экземпляра класса

// (объекта)

// Регистрация обработчиков двух событий

// AddHandler h.NameChanged, AddressOf SomeNameChanged

// h.NameChanged += new EventHandler(SomeNameChanged);

// AddHandler h.AgeChanged, AddressOf SomeAgeChanged

// h.AgeChanged += new EventHandler(SomeAgeChanged);

h.Name = "Иванов А.П."; //?Вызывает обработку события

// изменения имени

h.OutputName(); // Вывод имени

h.Age = 25; //?Вызывает обработку события

// изменения возраста

Console.WriteLine(h.Age); // Вывод возраста

h.Age = 25; // Не вызывает обработку события,

// т.к. возраст не изменился

h.Age = -20; // Не вызывает обработку события,

// т.к. возраст не может быть

// отрицательным. Выводит сообщение

Console.WriteLine(h.Age); // Вывод возраста. Результат тот же

Console.ReadLine(); // Ожидание нажатия клавиши <Enter>

}

}

}

/* Вывод:

? Имя изменено на Иванов А.П.

Иванов А.П.

? Возраст изменен на 25

25

Возраст должен быть между 0 и 200 годами.

25

*/

2. Наследование (MSDN_ООП_VB+C#_2010)

Наследование позволяет создавать новые классы, которые повторно используют, расширяют и изменяют поведение, определенное в другом классе. Класс, члены которого наследуются, называется базовым классом, а класс, который наследует эти члены, называется производным классом. Следует учитывать, что все классы в C# и Visual Basic неявно наследуются от класса Object, который поддерживает иерархию классов .NET и предоставляет низкоуровневые службы для всех классов.

Примечание. Управляемые языки в .NET Framework не поддерживают множественное наследование, т.е. можно задать только один базовый класс для производного класса.

Наследование от базового класса:

class DerivedClass:BaseClass{}

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

Указание, что класс не может использоваться в качестве базового класса:

public sealed class A {}

Указание, что класс может использоваться только в качестве базового класса и нельзя создать экземпляр этого класса:

public abstract class B {}

Переопределяющие члены.

По умолчанию производный класс наследует все члены от своего базового класса. Если необходимо изменить поведение унаследованного члена, необходимо переопределить его. Т.е. в производном классе можно определить новую реализацию метода, свойства или события.

Следующие модификаторы используются для управления переопределением свойств и методов.

Модификатор Visual Basic

Модификатор C#

Определение

Overridable (Visual Basic)

virtual (Справочник по C#)

Разрешает переопределение члена класса в производном классе.

Overrides (Visual Basic)

override (Справочник по C#)

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

NotOverridable (Visual Basic)

Не поддерживается

Запрещает переопределение члена в наследующем классе.

MustOverride (Visual Basic)

abstract (Справочник по C#)

Требует, чтобы член класса был переопределен в производном классе.

Shadows (Visual Basic)

Модификатор new (Справочник по C#)

Скрывает член, наследуемый от базового класса

22

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]