c#中委托补充(实例学习)
2016-08-31 21:22
316 查看
实例一:Action委托,以及泛型委托 using System; using System.Text; using System.Text.RegularExpressions; class Test { static void Show() { Console.WriteLine("打印输出1"); } private static void Show(int i) { Console.WriteLine(i); } private static void Show(string str1, string str2) { Console.WriteLine(str1+str2); } public static void Main() { Action a = Show; //Action为系统内置的一个不带返回值且没有参数的委托 Action<int> a1 = Show; //Action<T>为一个不带返回值的泛型委托T为参数的类型 Action<string, string> a2=Show; //带两个参数的委托 a(); a1(1000); a2("hehe","nihao"); } } 实例二:Func委托 using System; using System.Text; using System.Text.RegularExpressions; class Test { static void Show() { Console.WriteLine("打印输出1"); } private static int Show(int i) { Console.WriteLine(i); return 100; } private static string Show(string str1, string str2) { Console.WriteLine(str1+str2); string str = "完成代码"; return str; } public static void Main() { Func<int, int> a; //Func也是系统定义的一个委托,第一个参数为函数参数,第二个参数为返回类型 a = Show; Func<string, string, string> b; //能委托的函数带有两个string类型参数,以及一个string类型的返回值 b = Show; Console.WriteLine(a(1000)); Console.WriteLine(b("代码1","代码2")); } } 实例三:多播委托 using System; using System.Text; using System.Text.RegularExpressions; internal class Employ { public int data; public string name; public Employ(int d, string n) { data = d; name = n; } } class Test { static void Show() { Console.WriteLine("打印输出1"); } private static void Show2() { Console.WriteLine("show2"); } private static int Show(int i) { Console.WriteLine(i); return 100; } private static string Show(string str1, string str2) { Console.WriteLine(str1+str2); string str = "完成代码"; return str; } public static void Main() { Action a; a = Show; a += Show2; Delegate[]delegates=a.GetInvocationList(); //多播委托获取所有指向的函数列表 foreach (var v in delegates) { v.DynamicInvoke(); //单独调用函数 } } } 实例四:使用泛型委托来对类对象排序 using System; using System.ComponentModel; using System.Text; using System.Text.RegularExpressions; internal class Employ { public int data; public string name; public Employ(int d, string n) { data = d; name = n; } public static bool Compare(Employ a, Employ b) //自定义的比较函数 { if (a.data > b.data) return true; else { return false; } } public override string ToString() //重载原类的ToSting方法,用于输出时直接输出 { return data + ":" + name; } } internal class Test { private static void sort<T>(T [] a,Func<T,T,bool>comp ) //使用泛型委托来实现对对象冒泡排序 { for (int i = 0; i < a.Length-1; i++) { for (int j = 0; j < a.Length-i-1; j++) { if (comp(a[j] ,a[j + 1])) //调用委托 { T temp = a[j]; //这里其实交换的是数组中的每个对象的引用,相当于c++指针数组中的指针 a[j] = a[j + 1]; a[j + 1] = temp; } } } } public static void Main() { Employ[] a = { new Employ(10, "a"), new Employ(3, "b"), new Employ(2, "c"), new Employ(5, "d"), new Employ(4, "d") }; sort<Employ>(a, Employ.Compare); //调用排序 foreach (var w in a) { Console.WriteLine(w); } } }
相关文章推荐
- c#的委托和事件的实例学习
- (周星驰版)学习委托的最好实例 (转载+自己补充了注释)
- (周星驰版)学习委托的最好实例 (转载+自己补充了注释)
- C#学习笔记--委托(delegate)
- c# 委托的学习日记
- [学习]C#里的委托和事件实现Observer
- c#学习笔记(六)委托
- (周星驰版)学习委托的最好实例 (转载)
- c# 委托的学习日记
- c#委托的学习
- 谈谈对C#委托的理解,附代码实例
- C#中委托和事件的一个简单实例
- C#学习笔记-delegate 委托
- C#学习笔记二:用实例深入理解装箱、拆箱
- CLR Via C#系列学习笔记之委托
- C#中委托如何使用?一点学习心得
- C#中使用委托的学习笔记
- 关于C#中委托的学习
- C#基础学习系列之:委托和事件