組合代表(多播代表)
新增+
和減法 -
操作可用於組合委託例項。代理包含已分配代理的列表。
using System;
using System.Reflection;
using System.Reflection.Emit;
namespace DelegatesExample {
class MainClass {
private delegate void MyDelegate(int a);
private static void PrintInt(int a) {
Console.WriteLine(a);
}
private static void PrintType<T>(T a) {
Console.WriteLine(a.GetType());
}
public static void Main (string[] args)
{
MyDelegate d1 = PrintInt;
MyDelegate d2 = PrintType;
// Output:
// 1
d1(1);
// Output:
// System.Int32
d2(1);
MyDelegate d3 = d1 + d2;
// Output:
// 1
// System.Int32
d3(1);
MyDelegate d4 = d3 - d2;
// Output:
// 1
d4(1);
// Output:
// True
Console.WriteLine(d1 == d4);
}
}
}
在這個示例中,d3
是 d1
和 d2
委託的組合,因此在呼叫時程式輸出 1
和 System.Int32
字串。
將委託與非 void 返回型別組合:
如果多播委託具有 nonvoid
返回型別,則呼叫者從最後一個要呼叫的方法接收返回值。仍然會呼叫上述方法,但會丟棄它們的返回值。
class Program
{
public delegate int Transformer(int x);
static void Main(string[] args)
{
Transformer t = Square;
t += Cube;
Console.WriteLine(t(2)); // O/P 8
}
static int Square(int x) { return x * x; }
static int Cube(int x) { return x*x*x; }
}
t(2)
將首先呼叫 Square
然後呼叫 Cube
。捨棄 Square 的返回值並保留最後一個方法的返回值,即 Cube
。