个人理解,一个是使方法可变,一个是使类型可变
//例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"; } }