2014-11-04 3 views
0

Я определил поле делегата внутри класса, и я инициализирую это поле делегата непосредственно внутри статической функции (без создания объекта). Он не должен работать, потому что нет объекта класса, а поле делегата не является статичным. Но это работает. Может кто-нибудь объяснить, как это работает. Я скопировал некоторые из моего кода ниже для справки:с использованием делегата внутри статической функции

class Test 
{ 

    delegate void CustomDel(String s); 

    static void main() 
    { 
    CustomDel del1, del2, del3; //it shouldn't work, but is working. 
    } 
} 

ответ

2

Это не делать то, что вы думаете:

delegate void CustomDel(String s); 

Это не поле, это определение типа делегата. Думайте об этом как-то вроде:

private class CustomDel : Delegate 
{ 
    // ... 
} 

Код выше не будет компилироваться, потому что вы не можете объявить делегатов как этот, но это по сути то, что происходит под капотом: CustomDel тип, только специальный один.

Теперь ваш код должен иметь больше смысла:

CustomDel del1, del2, del3; 

Это только декларирует три локальные переменные CustomDel типа.

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