浅学泛型委托
委托 可以定义自己的类型参数。
引用泛型委托的代码可以指定类型参数以创建已关闭的构造类型,就像实例化泛型类或调用泛型方法一样,如下例所示:
publicdelegatevoid Del<T>(T item);
publicstaticvoid Notify(int i) { }
Del<int> m1 = new Del<int>(Notify);s
C# 2.0 版具有称为方法组转换的新功能,此功能适用于具体委托类型和泛型委托类型,并使您可以使用如下简化的语法写入上一行:
Del<int> m2 = Notify;
由于对泛型委托理解的不够深刻,所以根据网络资料做了一个小例子,新建一个控制台应用程序:
首先,定义一个没有返回值的泛型委托:
public delegate void TDelegateEventHandler<ParamOne,ParamTwo>(ParamOne paramone,ParamTwo paramtwo);
然后定义两个不同的类,他们包含两个不同的事件,但该事件的类型都是同一个委托----这个泛型委托:
public class TestClassEventArgs : EventArgs
{
public string message;
public TestClassEventArgs(string message)
{
this.message = message;
}
}
class TestClass
{
public string identifier = "TestClassOne";
public event TDelegateEventHandler<TestClass, TestClassEventArgs> TestClassEvent; //定义一个事件
protected virtual void OnTestClassEvent(TestClassEventArgs e)
{
if (TestClassEvent != null) //判断是否触发事件
{
TestClassEvent(this, e);
}
}
public void MessageArrive(string message)
{
TestClassEventArgs e = new TestClassEventArgs(message);
OnTestClassEvent(e);
}
}

现在,来看怎么使用泛型委托:
class Program
{
static void Main(string[] args)
{
TestClass one = new TestClass();
one.TestClassEvent += new TDelegateEventHandler<TestClass, TestClassEventArgs>(one_TestClassEvent); //注册事件
one.MessageArrive("Hello");
TestClassTwo two = new TestClassTwo();
two.TestClassEvent += new TDelegateEventHandler<TestClassTwo, TestClassEventArgs>(two_TestClassEvent);
two.MessageArrive("TwoHello");
}
static void two_TestClassEvent(TestClassTwo paramone, TestClassEventArgs paramtwo)
{
Console.WriteLine(paramone.identifier + "has received message:" + paramtwo.message);
Console.ReadLine();
}
static void one_TestClassEvent(TestClass paramone, TestClassEventArgs paramtwo)
{
Console.WriteLine(paramone.identifier + "has received message:" + paramtwo.message);
Console.ReadLine();
}
}
好啦!这样就是一个泛型委托的应用啦!
浙公网安备 33010602011771号