Первая программа на C# и основные приемы работы в системе ms visual Studio 3 Структура программы 7
Вид материала | Программа |
СодержаниеАбстрактные классы и полиморфизм Лекция 21. События Классы с событиями |
- Visual Basic Основы работы с базами данных, 1336.88kb.
- Лекция Visual Studio. Net, Framework. Net, 158.46kb.
- Лекція Механізми доступу додатків С++ до баз даних. Створення у середовищі Borland, 46.7kb.
- Основы работы с Visual Studio. Net, 433.6kb.
- Лекции в формате pdf (9 лекций с вопросами для самопроверки по каждой лекции). Проекты, 18.64kb.
- Язык Visual Basic имеет разнообразные средства визуализации разрабатываемых приложений., 41.17kb.
- Запуск программы: Пуск Программы Visual Basic; для начала работы над новым проектом, 36.28kb.
- Примерная структура выполнения отчёта по преддипломной производственной практике, 12.34kb.
- Пример настоящей программы для компьютера на языке Лого 16 > Последовательность работы, 4798.61kb.
- Как выглядит структура программы социологического исследования? Ответ, 132.79kb.
Абстрактные классы и полиморфизм
Нередко бывают ситуации, когда следует гарантировать невозможность создания объектов класса. В частности, это бывает для базовых классов, соответствующих абстрактным понятиям. В таком случае базовый класс следует сделать абстрактным, указав в его заголовке ключевое слово 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().
ЛИТЕРАТУРА
- Троелсен Э. Язык программирования C# 2005 и платформа .NET 2.0 3-е издание.: Пер. с англ. – М.: ООО «И.Д. Вильямс», 2007. – 1168 с.: ил.
- Лабор В.В. Си Шарп: Создание приложений для Windows – Мн.: Харвест, 2003.-384с.
- Микелсен К. Язык программирования C#. Лекции и упражнения. Учебник: Пер. с англ./ - СПб.: ООО «ДиаСофтЮП», 2002. – 656 с.
До этого хорошо бы «Пользовательские элементы управлении» и пример с их иерархией. Шаблон Observer.
^
Лекция 21. События
Классы с событиями
Каждый объект является экземпляром некоторого класса. Класс задает свойства и поведение своих экземпляров. Методы класса определяют поведение объектов, свойства – их состояние. Все объекты обладают одними и теми же методами и, следовательно, ведут себя одинаково. Можно полагать, что методы задают врожденное поведение объектов. Этого нельзя сказать о свойствах, – значения свойств объектов различны, так что экземпляры одного класса находятся в разных состояниях. Объекты класса «Человек» могут иметь разные свойства: один – высокий, другой – низкий, один – сильный, другой – умный. Но методы у них одни: есть и спать, ходить и бегать. Как сделать поведение объектов специфическим? Как добавить им поведение, характерное для данного объекта? Один из наиболее известных путей – это наследование. Можно создать класс наследник, у которого наряду с наследованным родительским поведением будут и собственные методы. Например, наследником класса «Человек» может быть класс «Человек_Образованный», обладающий методами: читать и писать, считать и программировать.
Есть еще один механизм, позволяющий объектам вести себя по-разному в одних и тех же обстоятельствах. Это механизм событий, рассмотрением которого сейчас и займемся. Класс помимо свойств и методов может иметь события. Содержательно, событием является некоторое специальное состояние, в котором может оказаться объект класса. Так для объектов класса «Человек» событием может быть рождение или смерть, свадьба или развод. О событиях в мире программных объектов чаще всего говорят в связи с интерфейсными объектами, у которых события возникают по причине действий пользователя. Так командная кнопка может быть нажата – событие Click, документ может быть закрыт – событие Close, в список может быть добавлен новый элемент – событие Changed.
Интерфейсные объекты и многие другие программные объекты обладают стандартным набором предопределенных событий. В конце этой лекции мы поговорим немного об особенностях работы с событиями таких объектов. Сейчас же наше внимание будет сосредоточено на классах, создаваемых программистом. Давайте разберемся, как для таких классов создаются и обрабатываются события. Класс, решивший иметь события, должен уметь, по крайней мере, три вещи:
- Объявить событие в классе.
- Зажечь в нужный момент событие, передав обработчику необходимые для обработки аргументы. (Под зажиганием или включением события, понимается некоторый механизм, позволяющий объекту уведомить клиентов класса, что у него произошло событие.)
- Проанализировать, при необходимости, результаты события, используя значения выходных аргументов события, возвращенные обработчиком.
Заметьте, зажигая событие, класс посылает сообщение получателям события – объектам некоторых других классов. Будем называть класс, зажигающий событие, классом – отправителем сообщения (sender). Класс, чьи объекты получают сообщения, будем называть классом – получателем сообщения (receiver). Класс, отправитель сообщения, в принципе, не знает своих получателей. Он отправляет сообщение в «безвоздушное» пространство. Одно и то же сообщение может быть получено и по-разному обработано произвольным числом объектов разных классов. Взгляните на схему, демонстрирующую взаимодействие объектов при посылке и получении сообщения:
Рис. 21.1. Взаимодействие объектов. Посылка и получение сообщения о событии