2017-03-12 6 views
0

私は代議員を理解しようとしています。なぜC#デリゲートコールは関数名を引数として受け入れますか?

public delegate void DelegateType1(); 

public static void callDelegate1(DelegateType1 callback) { 
    callback(); 
} 

void start() { 
    callDelegate1(runMe); 
} 

void runMe() { 
    Debug.Log("Why?"); 
} 

「なぜですか?」と出力されます。

私の質問は:CallDelegate1がDelegateType1タイプの引数を取る場合は、なぜそれがまた、引数として関数名を受け入れていますか?また、これは悪い習慣ですか?オンラインで見たすべてのチュートリアルでは、関数名はという変数に格納されています。DelegateType1

+2

私は、引数が '1'であると宣言された関数f(int i)をなぜ呼び出すことができるのかという疑問に似ていると思います。 'int'変数はint値への参照を表します。代理人 "[メソッドへの参照](https://msdn.microsoft.com/en-us/library/ms173171.aspx)"を参照してください。関数名は、 '1'のような代理リテラルです。 –

+0

正確に@ PeterA.Schneider –

+1

C#仕様:** 6.6メソッドグループ変換**暗黙の変換(6.1)は、メソッドグループ(7.1)から存在します。互換性のあるデリゲート型に変換します。 – PetSerAl

答えて

関連する問題