• 泛型委托


    委托 可以定义自己的类型参数。引用泛型委托的代码可以指定类型参数以创建已关闭的构造类型,就像实例化泛型类或调用泛型方法一样,如下例所示:

    public delegate void Del<T>(T item);
    public static void Notify(int i) { }
    
    Del<int> m1 = new Del<int>(Notify);
    //或者
    Del<int> m2 = Notify;

    在泛型类内部定义的委托使用泛型类类型参数的方式可以与类方法所使用的方式相同。

    private static void DoWork(float[] items) { }
    
    public static void TestStack()
    {
        Stack<float> s = new Stack<float>();
        Stack<float>.StackDelegate d = DoWork;
    }

    根据典型设计模式定义事件时,泛型委托尤其有用,因为发送方参数可以为强类型,不再需要强制转换成 Object,或反向强制转换。

    delegate void StackEventHandler<T, U>(T sender, U eventArgs);
    
    class Stack<T>
    {
        public class StackEventArgs : System.EventArgs { }
        public event StackEventHandler<Stack<T>, StackEventArgs> stackEvent;
    
        protected virtual void OnStackChanged(StackEventArgs a)
        {
            stackEvent(this, a);
        }
    }
    
    class SampleClass
    {
        public void HandleStackChange<T>(Stack<T> stack, Stack<T>.StackEventArgs args) { }
    }
    
    public static void Test()
    {
        Stack<double> s = new Stack<double>();
        SampleClass o = new SampleClass();
        s.stackEvent += o.HandleStackChange;
    }
  • 相关阅读:
    python实现七段数码管显示
    词频统计实例
    分形几何中科赫雪花的绘制
    脚本实现自动化绘制
    Android查看数据库方法及工具(转)
    2011年度总结
    Bad NPObject as private data 解决方案
    LINQ学习之旅——LINQ TO SQL继承支持(转载)
    我记录开源系统1.6源码解析(一)
    2011年度总结
  • 原文地址:https://www.cnblogs.com/weicanpeng/p/8073877.html
Copyright © 2020-2023  润新知