Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Топ:
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Интересное:
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Дисциплины:
|
из
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. Взаимодействие объектов. Посылка и получение сообщения о событии
|
|
|
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!