泛型委托

无论是在类定义内还是类定义外,委托可以定义自己的类型参数。引用泛型委托的代码可以指定类型参数来创建一个封闭构造类型,这和实例化泛型类或调用泛型方法一样,如下例所示:

public delegate void MyDelegate(T item);
public void Notify(int i){}
//...
 
MyDelegate<int> m = new MyDelegate<int>(Notify);

C#2.0版有个新特性称为方法组转换(method group conversion),具体代理和泛型代理类型都可以使用。用方法组转换可以把上面一行写做简化语法:

MyDelegate m = Notify;

 

在泛型类中定义的委托,可以与类的方法一样地使用泛型类的类型参数。

class Stack
{
T[] items;
      int index
//...
public delegate void StackDelegate(T[] items);
}

引用委托的代码必须要指定所在类的类型参数,如下:

Stack<float> s = new Stack<float>();
Stack<float>.StackDelegate myDelegate = StackNotify;

泛型委托在定义基于典型设计模式的事件时特别有用。因为sender[JX2] ,而再也不用与Object相互转换。

public void StackEventHandler(T sender, U eventArgs);
class Stack
{
    //
    public class StackEventArgs : EventArgs{...}
    public event StackEventHandler, StackEventArgs> stackEvent;
    protected virtual void OnStackChanged(StackEventArgs a)
    {
      stackEvent(this, a);
    }
}
class MyClass
{
  public static void HandleStackChange(Stack stack, StackEventArgs args){...};
}
Stack<double> s = new Stack<double>();
MyClass mc = new MyClass();
s.StackEventHandler += mc.HandleStackChange;

 

你可能感兴趣的:(泛型委托)