zoukankan      html  css  js  c++  java
  • 泛型委托

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

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

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

    MyDelegate<int> m = Notify;

     

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

    class Stack<T>
    {
    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,U>(T sender, U eventArgs);
    class Stack<T>
    {
        //
        public class StackEventArgs : EventArgs{...}
        public event StackEventHandler<Stack<T>, StackEventArgs> stackEvent;
        protected virtual void OnStackChanged(StackEventArgs a)
        {
          stackEvent(this, a);
        }
    }
    class MyClass
    {
      public static void HandleStackChange<T>(Stack<T> stack, StackEventArgs args){...};
    }
    Stack<double> s = new Stack<double>();
    MyClass mc = new MyClass();
    s.StackEventHandler += mc.HandleStackChange;
  • 相关阅读:
    小G的城堡
    最大公约数与扩展欧几里得算法
    阶乘的逆元
    素数的判断
    快速幂
    重载高精度运算符
    Hello World!
    【JavaScript】7-13 日K蜡烛图 (15分)
    【JavaScript】7-12 两个数的简单计算器 (10分)
    【JavaScript】7-11 分段计算居民水费 (10分)
  • 原文地址:https://www.cnblogs.com/XiaoRuLiang/p/12422293.html
Copyright © 2011-2022 走看看