Общие вопросы по C#

Сообщение #1
01 октября 2013, 21:59 | Общие вопросы по C#
Здесь можно задать общие вопросы, связанные с программированием на C#.
Сообщений в теме: 6

Ответы

Сообщение #2
04 октября 2013, 15:36
Grim (2013-10-01 21:59:25):
Здесь можно задать общие вопросы, связанные с программированием на C#.
Недавно меня спросили: «Знаешь ли ты, что такое abstract и virtual и Event»… Что это и как с этим работать, а также для чего оно надо?
Сообщение #3
04 октября 2013, 17:14
Недавно меня спросили: «Знаешь ли ты, что такое abstract и virtual и Event»… Что это и как с этим работать, а также для чего оно надо?

Abstract — ключевое слово. Если метод помечен как абстрактный — это значит, что у него нет реализации в данном классе. Если класс содержит хоть один абстрактный метод — этот класс тоже будет являться абстрактным. Нельзя создать экземпляр абстрактного класса — он может быть использован только как базовый.
Virtual — тоже ключевое слово. В целом, его суть в том, что метод или поле, помеченное как виртуальное, может быть переопределено в классе-наследнике.
Event — тоже ключевое слово. Используется для создания модели событий, т.е. чтобы сообщить другим классам, что произошло какое-то событие.

Писать примеры — очень долго. Хотя если совсем припрёт — напишу :)
Последний раз редактировал пользователь Grim - 04 октября 2013, 17:16
Сообщение #4
04 октября 2013, 21:11
Grim (2013-10-04 17:14:48):
Недавно меня спросили: «Знаешь ли ты, что такое abstract и virtual и Event»… Что это и как с этим работать, а также для чего оно надо?

Abstract — ключевое слово. Если метод помечен как абстрактный — это значит, что у него нет реализации в данном классе. Если класс содержит хоть один абстрактный метод — этот класс тоже будет являться абстрактным. Нельзя создать экземпляр абстрактного класса — он может быть использован только как базовый.
Virtual — тоже ключевое слово. В целом, его суть в том, что метод или поле, помеченное как виртуальное, может быть переопределено в классе-наследнике.
Event — тоже ключевое слово. Используется для создания модели событий, т.е. чтобы сообщить другим классам, что произошло какое-то событие.

Писать примеры — очень долго. Хотя если совсем припрёт — напишу :)
Интересней про Event. Пример можно?
Сообщение #5
04 октября 2013, 23:19
mepihin (2013-10-04 21:11:10):
Grim (2013-10-04 17:14:48):
Недавно меня спросили: «Знаешь ли ты, что такое abstract и virtual и Event»… Что это и как с этим работать, а также для чего оно надо?

Abstract — ключевое слово. Если метод помечен как абстрактный — это значит, что у него нет реализации в данном классе. Если класс содержит хоть один абстрактный метод — этот класс тоже будет являться абстрактным. Нельзя создать экземпляр абстрактного класса — он может быть использован только как базовый.
Virtual — тоже ключевое слово. В целом, его суть в том, что метод или поле, помеченное как виртуальное, может быть переопределено в классе-наследнике.
Event — тоже ключевое слово. Используется для создания модели событий, т.е. чтобы сообщить другим классам, что произошло какое-то событие.

Писать примеры — очень долго. Хотя если совсем припрёт — напишу :)
Интересней про 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"));
        }
    }

Копипаста с MSDN. Поясню по хардкору: SampleEventArgs — класс для «аргументов» события. Само событие вызывает делегат SampleEventHandler, а SampleEvent лишь объявление делегата. Вообще весь механизм для меня немного неясен — как хардкорщик С++ я бы просто создал делегат и всё. Хотя в C# свои заморочки. Например, в коде можно будет сделать
Publisher p;
p.SampleEvent+=new Publisher.SampleEventHandler(your_func_that_handles);
Сообщение #6
05 октября 2013, 00:09
Спасибо