委托与泛型

个人理解,一个是使方法可变,一个是使类型可变

//例1:委托

View Code
 static void Main(string[] args)
        {
            ShowMsg("msg", ShowFun1);
            ShowMsg("msg", ShowFun2);
            Console.ReadKey();
        }
        public delegate void DelegateShow(string msg);  //声明方法的参数
        public static void ShowFun1(string msg)  //具体方法
        {
            Console.WriteLine("ShowFun1:" + msg);
        }
        public static void ShowFun2(string msg)
        {
            Console.WriteLine("ShowFun2:" + msg);
        }
        public static void ShowMsg(string msg, DelegateShow fun)  //统一调用
        {
            fun(msg);
        }

//例2:加上泛型

View Code
static void Main(string[] args)
        {
            ShowMsg(new ShowClass1(), ShowFun1);
            ShowMsg(new ShowClass2(), ShowFun2);
            Console.ReadKey();
        }
        public delegate void DelegateShow<T>(T msg);  //声明方法的参数
        public static void ShowFun1<T>(T msg)  //具体方法
        {
            Console.WriteLine("ShowFun1:" + msg);
        }
        public static void ShowFun2<T>(T msg)
        {
            Console.WriteLine("ShowFun2:" + msg);
        }
        public static void ShowMsg<T>(T msg, DelegateShow<T> fun)  //统一调用
        {
            fun(msg);
        }

        public class ShowClass1
        {
            public override string ToString()
            {
                return "ShowClass1";
            }
        }
        public class ShowClass2
        {
            public override string ToString()
            {
                return "ShowClass2";
            }
        }
原文地址:https://www.cnblogs.com/vipcjob/p/2556552.html