5

重複の可能性:
なぜ「newDelegateType(Delegate)」を使用するのですか?
new Thread(void Target())とnew Thread(new ThreadStart(void Target()))の違いは何ですか?

それで、私は少しの委任を経て、どういうわけか全体の考えを得ました。今、私はどこでもこのような例を見ます:

public delegate void Deleg();
Deleg deleg = new Deleg(FunctionName);

deleg();

これにより、コンストラクターにパラメーターとして渡されることを指す関数を持つデリゲートオブジェクトが作成されると思います。

今、私もこのようにすることができます:

public delegate void Deleg();
public Deleg deleg;  

deleg = FunctionName;
deleg();

これは参照を作成するだけのようで、関数のアドレスが渡されます。これはまったく同じように機能し、すべてのデリゲート機能を備えています。

しかし今、2番目の例にもう1行あるという事実に関係なく、最初の行はチュートリアルでより人気があるので、実際に2番目の例から何かを失ったり得たりしますか?

4

3 に答える 3

5

ゲインはタイピングが少し少なくなります。コンパイラは当初よりもスマートになっているため、メソッドグループの変換を暗黙的に実行できるため、もう実行する必要はありませnew Deleg(FunctionName)ん。

于 2013-01-05T20:09:38.377 に答える
0

(最初の例で行うように)同じ行に割り当てを追加する場合、入力するコードの量はほぼ同じです。

public delegate void Deleg();
public Deleg deleg = FunctionName;
deleg();
于 2013-01-05T20:13:24.357 に答える
0

2番目はデリゲート推論です。

メソッドは、順序とタイプの順序でデリゲートの入力パラメーターリストと一致しますか?

  • はい->メソッドのシグネチャがデリゲートのシグネチャと一致するため、デリゲートが推測されます。

  • いいえ->デリゲートとメソッドの入力パラメーターが一致しません。デリゲート型の推論はできません。

デリゲート型推論を使用して何かを失いますか?いいえ。それは同じことであり、それが望ましいと私は主張します。冗長性の少ないコードであり、読みやすさが向上します。

さらに、デリゲート型推論により、別のオプションが追加されます。

public delegate void Do();

Do some = () =>
{
   // Do stuff
};

または

public delegate void Do(string a, string b);

// C# compiler infers the delegate from the lambda/anonymous method signature and it infers the type of the whole parameters too!
Do some = (a, b) =>
{
   // Do stuff
}
于 2013-01-05T20:13:52.517 に答える