Сообщение #1
01 октября 2013, 21:59
|
Общие вопросы по C#
Здесь можно задать общие вопросы, связанные с программированием на C#.
Недавно меня спросили: «Знаешь ли ты, что такое abstract и virtual и Event»… Что это и как с этим работать, а также для чего оно надо?
Интересней про Event. Пример можно?Grim (2013-10-04 17:14:48):Недавно меня спросили: «Знаешь ли ты, что такое abstract и virtual и Event»… Что это и как с этим работать, а также для чего оно надо?
Abstract — ключевое слово. Если метод помечен как абстрактный — это значит, что у него нет реализации в данном классе. Если класс содержит хоть один абстрактный метод — этот класс тоже будет являться абстрактным. Нельзя создать экземпляр абстрактного класса — он может быть использован только как базовый.
Virtual — тоже ключевое слово. В целом, его суть в том, что метод или поле, помеченное как виртуальное, может быть переопределено в классе-наследнике.
Event — тоже ключевое слово. Используется для создания модели событий, т.е. чтобы сообщить другим классам, что произошло какое-то событие.
Писать примеры — очень долго. Хотя если совсем припрёт — напишу :)
mepihin (2013-10-04 21:11:10):Интересней про Event. Пример можно?Grim (2013-10-04 17:14:48):Недавно меня спросили: «Знаешь ли ты, что такое abstract и virtual и Event»… Что это и как с этим работать, а также для чего оно надо?
Abstract — ключевое слово. Если метод помечен как абстрактный — это значит, что у него нет реализации в данном классе. Если класс содержит хоть один абстрактный метод — этот класс тоже будет являться абстрактным. Нельзя создать экземпляр абстрактного класса — он может быть использован только как базовый.
Virtual — тоже ключевое слово. В целом, его суть в том, что метод или поле, помеченное как виртуальное, может быть переопределено в классе-наследнике.
Event — тоже ключевое слово. Используется для создания модели событий, т.е. чтобы сообщить другим классам, что произошло какое-то событие.
Писать примеры — очень долго. Хотя если совсем припрёт — напишу :)
public class SampleEventArgs
{
public SampleEventArgs(string s) { Text = s; }
public String Text {get; private set;} // readonly
}
public class Publisher
{
// Declare the delegate (if using non-generic pattern).
public delegate void SampleEventHandler(object sender, SampleEventArgs e);
// Declare the event.
public event SampleEventHandler SampleEvent;
// Wrap the event in a protected virtual method
// to enable derived classes to raise the event.
protected virtual void RaiseSampleEvent()
{
// Raise the event by using the () operator.
if (SampleEvent != null)
SampleEvent(this, new SampleEventArgs("Hello"));
}
}
Publisher p;
p.SampleEvent+=new Publisher.SampleEventHandler(your_func_that_handles);