标签:source ssi art following invoke follow ima using from
【原文】http://www.cnblogs.com/liqingwen/p/6046171.html
上篇《C# 知识回顾 - 委托 delegate》已经介绍委托的基本知识,这里是对其进行补充说明及加深理解。
委托可以与命名方法关联。 使用命名方法对委托进行实例化时,该方法将作为参数传递,例如:
1 class Program 2 { 3 //声明一个委托 4 delegate void MyDel(string message); 5 6 7 static void Main(string[] args) 8 { 9 //使用静态方法作为参数实例化委托 10 MyDel del = Print; 11 } 12 13 //声明一个方法 14 private static void Print(string message) 15 { 16 Console.WriteLine(message); 17 } 18 }
这被称为使用命名的方法。 使用命名方法构造的委托可以封装静态方法或实例方法。在早期版本的 C# 中,命名方法是对委托进行实例化的唯一方式。 但是,在不希望付出创建新方法的系统开销时,C# 使您可以对委托进行实例化,并立即指定委托在被调用时将处理的代码块。 代码块可以包含 lambda 表达式或匿名方法。
1 class Program 2 { 3 //声明一个委托 4 delegate void MyDel(int n, int m); 5 6 static void Main(string[] args) 7 { 8 //使用静态方法 Print 作为参数实例化委托 9 MyDel del = Print; 10 Console.WriteLine("准备好了哦,要开始调用委托了哦!"); 11 12 for (int i = 0; i < 10; i++) 13 { 14 Print(i, 1); 15 } 16 17 Console.Read(); 18 } 19 20 //声明一个方法 21 private static void Print(int m, int n) 22 { 23 Console.Write(m - n + " "); 24 } 25 }
示例2:通过匿名方法实例化委托,修改示例1,结果同上。
class Program { //声明一个委托 delegate void MyDel(int n, int m); static void Main(string[] args) { //使用静态方法 Print 作为参数实例化委托 //MyDel del = Print; //使用匿名方法 MyDel del = delegate (int m, int n) { Console.Write(m - n + " "); }; Console.WriteLine("准备好了哦,要开始调用委托了哦!"); for (int i = 0; i < 10; i++) { Print(i, 1); } Console.Read(); } }
本示例演示如何创建多播委托。委托对象的一个有用属性是:
可以使用 + 运算符将多个对象分配给一个委托实例。多播委托包含已分配委托的列表。在调用多播委托时,它会按顺序调用列表中的委托。只能合并相同类型的委托。- 运算符可用于从多播委托中移除组件委托。
1 class Program 2 { 3 //声明一个委托 4 delegate void MyDel(); 5 6 static void Main(string[] args) 7 { 8 //Action:你也可以自己尝试使用 Action 代替 MyDel 试试 9 10 MyDel del = Start; //创建一个委托对象 11 MyDel del2 = Stop; //创建一个委托对象 12 MyDel del3 = del + Stop; //合并前两个委托对象 13 MyDel del4 = del3 - Start; //移除一个委托对象 14 15 Console.WriteLine($"This is {nameof(del)}: "); 16 del(); 17 Console.WriteLine($"This is {nameof(del2)}: "); 18 del2(); 19 Console.WriteLine($"This is {nameof(del3)}: "); 20 del3(); 21 Console.WriteLine($"This is {nameof(del4)}: "); 22 del4(); 23 24 Console.Read(); 25 } 26 27 private static void Start() 28 { 29 Console.WriteLine($" {nameof(Start)}..."); 30 } 31 32 private static void Stop() 33 { 34 Console.WriteLine($" {nameof(Stop)}!"); 35 } 36 }
--预览版,整理中--
标签:source ssi art following invoke follow ima using from
原文地址:http://www.cnblogs.com/liqingwen/p/6046171.html