2014-01-20 3 views
0

У меня есть две библиотеки классов, которые говорят A и B. У меня есть ссылка B. поэтому я могу вызвать любую функцию B. Но теперь нужно, я хочу поднять событие (или функцию , на самом деле просто хочу отправить небольшую информацию) A из B. Я не могу добавить ссылку из-за круговой зависимости. Есть какой-либо способ сделать это ?Поднять событие другой библиотеки классов в C#

, пожалуйста, дайте мне образец кода; как зарегистрировать и вызвать Благодаря

ответ

1

Определение события в классе B (вы можете использовать один из Action делегатов мероприятия):

public class B 
{ 
    public event Action<int> SomethingHappened; // define event 

    private void Something() 
    { 
     if (SomethingHappened != null) // check if somebody subscribed 
      SomethingHappened(42); // raise event and pass data 
    } 
} 

И подписаться на это событие в классе А:

public class A 
{ 
    private B _b; 

    public A(B b) 
    { 
     _b = b; 
     _b.SomethingHappened += SomethingHappenedWithB; // subscribe 
    } 

    private void SomethingHappenedWithB(int data) 
    { 
     // handle event, use data 
    } 
} 

Рассмотрите возможность чтения C# Events Tutorial

+1

Хотя это будет работать с 'Action ' лучше (по договоренности) использовать 'EventHandler ', где' SomeEventArgs' наследуется от 'EventArgs'. Кроме того, вместо 'Something' вы должны использовать' OnSomethingHappened'. – JeffRSon

+1

@JeffRS лучше, когда вы работаете с WinForms (или другой инфраструктурой, которая использует EventHandlers для событий), но с обычными классами классов, которые являются излишними. Если мне не нужно передавать отправителю подписчиков, я не буду добавлять эту функцию. Также передача 'EventArgs.Empty' действительно нечетна. Я всегда стараюсь следовать принципу YAGNI –

+0

@JeffRSon Я знаю о OnSomethingHappened и что он должен быть виртуально защищен, но снова для простого случая без наследования это не требуется –

Смежные вопросы