Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Топ:
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Интересное:
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Дисциплины:
2021-04-18 | 83 |
5.00
из
|
Заказать работу |
|
|
Сначала определим примитивные классы:
class A
{ public virtual void Do() { Console.Write("A works "); } }
class B:A
{ public override void Do() { Console.Write("B works "); } }
Присваивание
A w1 = new B(); w1.Do();
Параметры метода
static void HardWork(A worker)
{ worker.Do(); worker.Do();
Console.WriteLine("Help!");
worker.Do(); worker.Do();
}
Затем в Main:
HardWork(new B());
Результат:
B works B works Help! B works B works
Таким образом, метод HardWork успешно сочетает два вида действий:
- действия, независимые от типа передаваемого параметра (“Help!”);
- действия, полиморфно зависимые от типа передаваемого параметра.
Абстрактные классы и полиморфизм
Нередко бывают ситуации, когда следует гарантировать невозможность создания объектов класса. В частности, это бывает для базовых классов, соответствующих абстрактным понятиям. В таком случае базовый класс следует сделать абстрактным, указав в его заголовке ключевое слово abstract. Теперь попытка создания объектом будет распознаваться компилятором как ошибка.
Другая особенность абстрактных классов – наличие в них абстрактных методов. Такие методы имеют две синтаксические особенности:
1. В заголовке абстрактного метода указывается ключевое слово abstract.
2. Абстрактный метод не имеет реализации.
Теперь можно определить базовый класс Student следующим образом:
public abstract class Student
{ private string name;
private int mark;
public Student(string n){name=n;}
public abstract void PassExam();
public string Name { get { return name; } }
public int Mark
{ get { return mark; } set { mark = value; } }
}
Наличие абстрактного метода позволяет реализовать принудительный полиморфизм. Дело в том, что производный класс обязан реализовать абстрактный метод (иначе этот класс остается абстрактным и должен быть описан как abstract). Абстрактные методы по умолчанию считаются описанными как virtual (указывать virtual даже нельзя).
|
Хотя непосредственно нельзя создавать объекты абстрактных классов, конструктор в абстрактном классе может быть определен для создания объектов производных классов, где он будет вызываться в соответствующем конструкторе с помощью конструкции base().
ЛИТЕРАТУРА
До этого хорошо бы «Пользовательские элементы управлении» и пример с их иерархией. Шаблон Observer.
Лекция 21. События
Классы с событиями
Каждый объект является экземпляром некоторого класса. Класс задает свойства и поведение своих экземпляров. Методы класса определяют поведение объектов, свойства – их состояние. Все объекты обладают одними и теми же методами и, следовательно, ведут себя одинаково. Можно полагать, что методы задают врожденное поведение объектов. Этого нельзя сказать о свойствах, – значения свойств объектов различны, так что экземпляры одного класса находятся в разных состояниях. Объекты класса «Человек» могут иметь разные свойства: один – высокий, другой – низкий, один – сильный, другой – умный. Но методы у них одни: есть и спать, ходить и бегать. Как сделать поведение объектов специфическим? Как добавить им поведение, характерное для данного объекта? Один из наиболее известных путей – это наследование. Можно создать класс наследник, у которого наряду с наследованным родительским поведением будут и собственные методы. Например, наследником класса «Человек» может быть класс «Человек_Образованный», обладающий методами: читать и писать, считать и программировать.
Есть еще один механизм, позволяющий объектам вести себя по-разному в одних и тех же обстоятельствах. Это механизм событий, рассмотрением которого сейчас и займемся. Класс помимо свойств и методов может иметь события. Содержательно, событием является некоторое специальное состояние, в котором может оказаться объект класса. Так для объектов класса «Человек» событием может быть рождение или смерть, свадьба или развод. О событиях в мире программных объектов чаще всего говорят в связи с интерфейсными объектами, у которых события возникают по причине действий пользователя. Так командная кнопка может быть нажата – событие Click, документ может быть закрыт – событие Close, в список может быть добавлен новый элемент – событие Changed.
|
Интерфейсные объекты и многие другие программные объекты обладают стандартным набором предопределенных событий. В конце этой лекции мы поговорим немного об особенностях работы с событиями таких объектов. Сейчас же наше внимание будет сосредоточено на классах, создаваемых программистом. Давайте разберемся, как для таких классов создаются и обрабатываются события. Класс, решивший иметь события, должен уметь, по крайней мере, три вещи:
· Объявить событие в классе.
· Зажечь в нужный момент событие, передав обработчику необходимые для обработки аргументы. (Под зажиганием или включением события, понимается некоторый механизм, позволяющий объекту уведомить клиентов класса, что у него произошло событие.)
· Проанализировать, при необходимости, результаты события, используя значения выходных аргументов события, возвращенные обработчиком.
Заметьте, зажигая событие, класс посылает сообщение получателям события – объектам некоторых других классов. Будем называть класс, зажигающий событие, классом – отправителем сообщения (sender). Класс, чьи объекты получают сообщения, будем называть классом – получателем сообщения (receiver). Класс, отправитель сообщения, в принципе, не знает своих получателей. Он отправляет сообщение в «безвоздушное» пространство. Одно и то же сообщение может быть получено и по-разному обработано произвольным числом объектов разных классов. Взгляните на схему, демонстрирующую взаимодействие объектов при посылке и получении сообщения:
Рис. 21.1. Взаимодействие объектов. Посылка и получение сообщения о событии
|
|
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!