2015-07-02 6 views
1

Я знаю, что в Visual Basic функция делегата не может содержит необязательные параметры. Но может ли метод принять делегат как необязательный параметр?Можете ли вы передать функцию делегата в качестве необязательного параметра?

То, что я хочу сделать это:

Delegate Sub MyDelegate(ByVal input As String) 


Sub MyDelegateDefault(ByVal input As String) 
    'by default do nothing' 
End Sub 


Sub MyDelegateCustom1(ByVal input As String) 
    'do something here' 
End Sub 

В другой части кода:

Sub OtherFunction(ByVal str As String, Optional ByVal delegate As MyDelegate = AddressOf MyDelegateDefault) 
    delegate(str) 
End Sub 

Sub ParentFunction() 
    OtherFunction("",) '< "" as string, nothing for optional delegate parameter' 
End Sub 

Обратите внимание, как последняя функция OtherFunction занимает дополнительный делегат в качестве второго параметра.

Это вещь? Может ли функция делегата быть необязательным параметром?

+0

Я парень C#, но мне кажется вполне разумным. Вы попробовали? Это сработало? –

+0

На второй мысли нет, я бы держал пари, что это не сработает, потому что это, вероятно, ссылочный тип. Вам нужно будет использовать «MyDelagate = null» и проверить значение null, а не называть его, если null. –

+0

Вы правы! Установка его на ключевое слово VB Ничего не работает должным образом. Добавьте его в качестве ответа, и я верну его правильному! – Django

ответ

1

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

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