原則として:
1. デリゲーションの本質はポインター、つまり関数ポインターです。関数の最初のアドレスを取得するだけです。
C# の委任によりセキュリティが強化され、戻り値、パラメーターの型、パラメーターの数など、関数ポインターによって参照される関数命令ブロックの型検出に反映されます。
C の関数ポインターに値が割り当てられるとき (C# では、C# バックエンドがデリゲートをクラスとして処理し、カプセル化するため、デリゲートがインスタンス化されるときです)、割り当てられた値が型のさまざまな条件 (戻り値) を満たすかどうか、パラメータの種類、パラメータの数)はチェックされず、保証はユーザーによって与えられ、C# がコンパイルしてプロンプトを表示します。
2. デリゲートのインスタンス化のプロセス、つまりデリゲート オブジェクトを構築するプロセスでは、既存の関数コード命令ブロック (インスタンスの静的関数、非静的メンバー関数) のメモリ アドレスをデリゲートに割り当てます。代入処理は委任されたコンストラクターが行うものであるため、このパラメーターはバックグラウンドでシステムによって処理され、型チェックを満たす関数ポインターとチェックされる型 (戻り値) が必要です。 、パラメーターの種類、パラメーターの数) はすべて、デリゲートの宣言と定義時に指定されます。
3. デリゲートをインスタンス化する 2 つの方法:
1) A a = new A (静的メソッド名/インスタンス.メソッド名);
2) A a = 静的メソッド名/インスタンス.メソッド名。
デリゲートによって呼び出される 2 つのメソッド:
1) a.Invoke()
2)あ()
デリゲートの構築に使用されるメソッドは、静的メソッドまたはインスタンス化されたオブジェクトのメンバー関数です。本質的には、このコード命令がコンパイルされ、メモリが割り当てられ、パラメーターがデリゲート (基本的にはヘッダー) に渡されるということです。この観点から、自然な静的メソッドとインスタンス メソッドを使用してデリゲート インスタンスを構築および作成できます。