2016-12-16 10 views
0

Мне нужно добавить несколько методов в список вызовов делегата. Однако у всех из них есть логика принятия решений, связанная с ними. Таким образом, есть блок if, прежде чем метод будет привязан к списку вызовов делегата. Могу ли я это сделать без создания экземпляра делегата. Фрагмент кода выглядит следующим образом:Как добавить методы в список вызовов делегата без создания экземпляра делегата?

public delegate void SomeDelegate(); 

static void Method1() {} 
static void Method2() {} 

static void AddMethodsToInvocationList() 
{ 
    SomeDelegate someDelegate = new SomeDelegate(); 
    if (someLogic1) someDelegate += Method1; 
    if (someLogic2) someDelegate += Method2; 
} 

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

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

Благодарим за помощь. Очень признателен.

ответ

0

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

+0

Передача null дает мне «ожидаемое имя метода» компилятором красных squiggly. –

+0

@SaikatDas Вы можете назначить 'null' любой переменной делегата в каждой версии языка. Вы, по-видимому, фактически не присваивали переменную «null», а вместо этого делали что-то еще. – Servy

+0

Да, это решает мою проблему. Я передал значение null в инициализатор. Однако то, что вы имели в виду, присваивало значение null объявляемой переменной. Спасибо. –