Как я получаю подписчиков события?

Вы должны сначала установить JDK в свою систему.

Установить Java Home

JAVA_HOME = C: \ Program Files \ Java \ jdk1.7.0 [Местоположение вашего каталога установки JDK]

Как только у вас установлен путь установки JDK:

  • Щелкните правой кнопкой мыши значок «Мой компьютер» на
  • Выберите «Свойства».
  • Нажмите «Расширенные настройки системы»
  • Нажмите кнопку «Переменные среды».

enter image description here [/g2]

  • В разделе «Системные переменные» нажмите «Создать».
  • Введите имя переменной как JAVA_HOME.
  • Введите значение переменной в качестве пути установки для Java Development Kit.
  • Нажмите OK.
  • Нажмите «Применить изменения».

Установите JAVA Path под системную переменную

PATH = C : \ Program Files \ Java \ jdk1.7.0; [Добавить значение с точкой с запятой]

check here [/g3]

28
задан mezoid 21 February 2009 в 10:06
поделиться

3 ответа

События/делегаты C# многоадресно передаются, таким образом, делегат самостоятельно список. Из класса, для получения отдельных вызывающих сторон можно использовать:

if(field != null) { // or the event-name for field-like events
    // or your own event-type in place of EventHandler
    foreach(EventHandler subscriber in field.GetInvocationList())
    {
        // etc
    }
}

Однако для присвоения внезапно просто используйте + = или прямое присвоение:

SomeType other = ...
other.SomeEvent += localEvent;
32
ответ дан Marc Gravell 14 October 2019 в 10:59
поделиться

Обновление (благодарят комментаторам): делегируйте средства immuntability, что клонирование ничего не достигает по присвоению.

, Когда каждый пишет:

myDelegate += AHandler

абсолютно новый экземпляр делегата создан и присвоен myDelegate.

Поэтому код ниже работал бы точно то же без вызова Клона.

<час>

MulticastDelegate (базовый тип) имеет метод Клона.

, Чтобы смочь добраться до базового делегата Вы, возможно, должны были бы избежать обычного помощника, которого генерирует ключевое слово события, и справьтесь, вещи непосредственно (пользовательский добавляют и удаляют средства доступа).

Для показа этого:

    class Program {
        public delegate void MyDelegate(string name);

        public event MyDelegate EventOne;

        public void HandlerOne(string name) {
            Console.WriteLine("This is handler one: {0}", name);
        }
        public void HandlerTwo(string name) {
            Console.WriteLine("This is handler two: {0}", name);
        }
        public void HandlerThree(string name) {
            Console.WriteLine("This is handler three: {0}", name);
        }

        public void Run() {
            EventOne += HandlerOne;
            EventOne += HandlerTwo;
            Console.WriteLine("Before clone");
            EventOne("EventOne");

            MyDelegate eventTwo = (MyDelegate)EventOne.Clone();
            MyDelegate eventTwo = EventOne;
            Console.WriteLine("After clonecopy");
            EventOne("EventOne");
            eventTwo("eventTwo");

            Console.WriteLine("Change event one to show it is different");
            EventOne += HandlerThree;
            EventOne("EventOne");
            eventTwo("eventTwo");
        }

        static void Main(string[] args) {
            (new Program()).Run();
        }
    }
3
ответ дан Richard 14 October 2019 в 10:59
поделиться

Если событие является тем, опубликованным другим классом, Вы не можете - по крайней мере, не надежно. В то время как мы часто думаем о событии, как являющемся только что переменной делегата, это - на самом деле просто пара методов: добавьте и удалите (или подпишитесь и откажитесь от подписки).

, Если это - Ваш собственный код, это публикует событие, это легко - можно заставить добавить/удалить средства доступа сделать то, что Вы любите.

Взглянули на моя статья о событиях и видят, помогает ли это Вам. В противном случае предоставьте больше подробную информацию о том, что Вы хотите сделать, указывая, какие биты кода Вы можете изменить и который Вы не.

13
ответ дан Jon Skeet 14 October 2019 в 10:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: