Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2012, 11:12   #1
xWinDx
 
Регистрация: 13.04.2010
Сообщений: 7
По умолчанию Как отписаться от события

Доброе время суток!
В общем ситуация такая: есть три класса("Class1","Class2","Class3"). ..
"Class1" содержит публичное событие "Event1"
Структура "Class2":
Код:
class Class2
{
    private Class1 _fieldName;
    public Class1 FieldName
    {
            get { this._fieldName }
    }
    public Class2()
    {
      this._fieldName.Event1 += new System.EventHandler(method1);
    }
     private void method1(object sender, EventArgs e)
     {
     }
}
Структура "Class3":
Код:
class Class3 : Class2
{
    public Class3(): base()
    {
      // тут нужно отписаться
    }
 
}
Примичание: Доступа к редактированию классов 1 и 2 нету, также в классе 3 вызывать базовый конструктор обязательно...
Спасибо за помощь...
Писал по памяти, если есть вопросы спрашивайте!!!
Через reflection я нашёл MethodInfo нужного метода, я просто низнаю, что мне счас делат с этим MethodInfo, как отписать?!!!
xWinDx вне форума Ответить с цитированием
Старый 13.11.2012, 14:13   #2
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Код:
class Class2
        {
            public void Do()
            { 
                //Отписка
            }
        }
        class Class3 : Class2
        {
            void NadaOtpisatsya() {
                Do();
            }
        }
Cоответсвенно Do в классе3 вызываешь в нужное вермя
Guy вне форума Ответить с цитированием
Старый 14.11.2012, 00:37   #3
xWinDx
 
Регистрация: 13.04.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Guy Посмотреть сообщение
Код:
class Class2
        {
            public void Do()
            { 
                //Отписка
            }
        }
        class Class3 : Class2
        {
            void NadaOtpisatsya() {
                Do();
            }
        }
Cоответсвенно Do в классе3 вызываешь в нужное вермя
Ну народ, на всех форума одно и тоже))) Прочитайте внимательно мой пост!!! Обратите внимание на примечание!!! А так проблема уже решена. если интересно могу выложить решение!!!
xWinDx вне форума Ответить с цитированием
Старый 17.11.2012, 10:19   #4
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
Сообщение

Цитата:
Сообщение от xWinDx Посмотреть сообщение
Доброе время суток!
В общем ситуация такая: есть три класса("Class1","Class2","Class3"). ..
"Class1" содержит публичное событие "Event1"
Структура "Class2":
Код:
class Class2
{
    private Class1 _fieldName;
    public Class1 FieldName
    {
            get { this._fieldName }
    }
    public Class2()
    {
      this._fieldName.Event1 += new System.EventHandler(method1);
    }
     private void method1(object sender, EventArgs e)
     {
     }
}
Структура "Class3":
Код:
class Class3 : Class2
{
    public Class3(): base()
    {
      // тут нужно отписаться
    }
 
}
Сперва немного о модификаторе доступа private:
Цитата:
Сообщение от MSDN
Ключевое слово private является модификатором доступа к члену. Закрытый (private) доступ является уровнем доступа с минимальными правами. Доступ к закрытым членам можно получить только внутри тела класса или структуры, в которой они объявлены
Т.е. при наследовании, у класса Class3 не будет этого поля, точно также как и обработчика события method1. Если поле необходимо скрыть, оставив возможность доступа к нему в классах-наследниках, то необходимо использовать модификатор protected:
Цитата:
Сообщение от MSDN
Ключевое слово protected является модификатором доступа к члену. Доступ к члену с модификатором protected возможен внутри класса и из производных экземпляров класса.
Теперь если правильно понимаю, ты не знаешь зачем нужно ключевое слово base близ конструктора, тогда поясню:
Цитата:
Сообщение от MSDN
Ключевое слово base используется для доступа к членам базового из производного класса:

Вызов метода базового класса, который был переопределен другим методом.

Определение конструктора базового класса, который должен вызываться при создании экземпляров производного класса.
Просто убираешь ключевое слово base у конструктора и все, т.е. напиши:
Код:
class Class3 : Class2
{
    public Class3()
    {

    }
 
}
И еще, class - это не структура, это класс, для объявления структур есть другое ключевое слово - struct
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Старый 25.11.2012, 02:56   #5
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

конечно тема уже стара и ее автор решил проблему, но вставлю свое слово сюда:
чтобы отписаться, надо:
Код:
this._fieldName.Event1 -= new System.EventHandler(method1);
Olejik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПРИВЕТ ВСЕМ! Очень сильно нужна ваша потдержка(экзамен в понедельник ), огромная просьба отписаться..Буду премного благодарен..) SwAAAte83 Паскаль, Turbo Pascal, PascalABC.NET 1 20.01.2012 09:41
Как сделать повтор события? 2010KOHTEP Общие вопросы Delphi 13 24.10.2011 05:51
События в WPF. Обращение к компонентам формы из события Casper-SC Общие вопросы .NET 3 25.07.2010 19:03
Как перенести обработчик события? HTL Общие вопросы Delphi 9 07.01.2010 01:03
Как генерировать события от мышки? Serejka Общие вопросы Delphi 5 01.11.2008 13:48