前回の記事では、多言語挨拶プログラムを実装するための委任の使用法について説明しました。この記事では、.net 1.x での委任の使用法を要約します。
デリゲートは型 (クラス) であるため、最初にクラスを宣言し、次にオブジェクトを新規作成し、最後にそれを呼び出すというプロセスを経る必要があります。
.net 1.x での委任の使用は、次のコードのようになります:
1 namespace DelegateDemo 2 { 3 //声明委托 4 public delegate void MyDel(string arg1, string arg2); 5 6 class Program 7 { 8 static void Main(string[] args) 9 {10 //.net 1.x中的委托11 Class1 c1 = new Class1();12 13 //创建委托对象14 MyDel myDel1 = new MyDel(c1.InstanceMethod);//实例方法15 MyDel myDel2 = new MyDel(Class1.StaticMethod);//静态方法16 17 //调用委托18 myDel1("a", "b");//或者myDel1.Invoke("a", "b");19 myDel2("a", "b");//或者myDel2.Invoke("a", "b");20 21 Console.ReadKey();22 }23 }24 25 public class Class126 {27 public void InstanceMethod(string arg1, string arg2)28 {29 Console.WriteLine(string.Format("arg1:{0},arg2:{1}", arg1, arg2));30 }31 32 public static void StaticMethod(string arg1, string arg2)33 {34 Console.WriteLine(string.Format("arg1:{0},arg2:{1}", arg1, arg2));35 }36 }37 }
上記のコードから、次のように要約できます:
1、委任メソッドのシグネチャと戻り値の型がデリゲートと一致する限り、インスタンス メソッドも静的メソッドを受け入れることができます。
2. デリゲートを呼び出す方法は 2 つあります。1 つ目は基本的にデリゲートを呼び出す Invoke メソッドです。
上記は new DelegateType() を使用してデリゲートを作成しています。実際には、より簡単な方法を使用してデリゲートを作成できます。デリゲートを作成するための上記のコードは次のように簡略化できます:
1 //创建委托对象2 MyDel myDel1 = c1.InstanceMethod;//实例方法3 MyDel myDel2 = Class1.StaticMethod;//静态方法
上記の例では、デリゲートの作成時に初期化されるメソッドは 1 つだけです。実際、デリゲートは追加できます。複数のメソッドの追加 次のコードに示すように、「+=」を通じて削除メソッドが実装されます:
1 //创建委托对象2 MyDel myDel = c1.InstanceMethod;3 myDel += c1.InstanceMethod2;4 myDel += Class1.StaticMethod;5 myDel += Class1.StaticMethod2;
1。 System.MulticastDelegate クラス。連鎖委任用に設計されています。
2、+= は基本的に Delegate.Combine メソッドを呼び出します。
デリゲートの呼び出しは、メソッドを呼び出すのと同じくらい簡単です。これらのパラメーターは、デリゲートのメソッド リスト内の各メソッドを呼び出すために使用されます。次のコードに示すように、順番に呼び出されます。
1 //调用委托2 myDel("aaa","bbb");
チェーンされたデリゲートを順番に呼び出すことができる理由は、System.MulticastDelegate が次のデリゲートへのポインターを内部的に保持しているためです。
出力結果:
注:
1. 複数の同一のメソッドがデリゲートに追加された場合、これらのメソッドは繰り返し呼び出されます。
2. デリゲートに戻り値があり、デリゲートの呼び出しメソッド リストに複数のメソッドが含まれている場合、最後のメソッドの戻り値のみが返され、他の戻り値は無視されます。
最後に XMind を使用して要約します:
以上が.net 1.x のデリゲート インスタンスの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。