C#中的委托delegate(2)
2017-10-06 16:40
323 查看
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种方法动态地给参数赋值的做法,可以避免在程序中大量使用if-else(switch)语句,同时具有更好的可扩展性。
所以也可以这样赋值
既然委托GreetingDelegage和类型string地位一样,都是定义了一种参数类型,那么
委托不同于string,可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用所绑定的方法。
或者,也可以绕过GreetPeople方法,通过委托来直接调用EnglishGreeting和ChineseGreeting:
using System; using System.Collections.Generic; using System.Text; namespace Delegate { //定义委托,它定义了可以代表的方法的类型 public delegate void GreetingDelegate(string name); class Program { private static void EnglishGreeting(string name) { Console.WriteLine("Morning, " + name); } private static void ChineseGreeting(string name) { Console.WriteLine("早上好, " + name); } //注意此方法,它接受一个GreetingDelegate类型的方法作为参数 private static void GreetPeople(string name, GreetingDelegate MakeGreeting) { MakeGreeting(name); } static void Main(string[] args) { GreetPeople("Han", EnglishGreeting); GreetPeople("韩", ChineseGreeting); Console.ReadKey(); } } } 输出如下: Morning, Han 早上好, 韩
所以也可以这样赋值
string name1,name2; name1 = "Han"; name2 = "韩"; GreetPeople(name1,EnglishGreeting); GreetPeople(name2,ChineseGreeting); Console.ReadKey();
既然委托GreetingDelegage和类型string地位一样,都是定义了一种参数类型,那么
static void Main(string[] args) { GreetingDelegate delegate1,delegate2; delegate1 = EnglishGreeting; delegate2 = ChineseGreeting; GreetPeople("Han",delegate1); GreetPeople("韩",delegate2); Console.ReadKey(); }
委托不同于string,可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用所绑定的方法。
static void Main(string[] args) { GreetingDelegate delegate1; 98cb delegate1 = EnglishGreeting;//先给委托类型的变量赋值 delegate1 += ChineseGreeting;//给委托变量再绑定一个方法 //先后调用两个方法 GreetPeople("Han",delegate1); Console.ReadKey(); } 输出为: Morning,Han 早上好,韩
或者,也可以绕过GreetPeople方法,通过委托来直接调用EnglishGreeting和ChineseGreeting:
static void Main(string[] args) { GreetingDelegate delegate1; delegate1 = EnglishGreeting; // 先给委托类型的变量赋值(这里注意,第一次用的“=”,是赋值的语法;第二次,用的是“+=”,是绑定的语法。如果第一次就使用“+=”,将出现“使用了未赋值的局部变量”的编译错误。) delegate1 += ChineseGreeting; // 给此委托变量再绑定一个方法 // 将先后调用 EnglishGreeting 与 ChineseGreeting 方法 delegate1 ("Jimmy Zhang"); Console.ReadKey(); }
相关文章推荐
- C# 委托(delegate) 的小应用
- cSharp(c#)中的delegate(委托)
- c#初学-delegate合并委托(多路广播委托)一个委托进行多个函数调用
- 【C#】delegate(委托) 将方法作为参数在类class 之间传递
- C#中的委托(Delegate)和事件(Event)
- c#中的delegate(委托)和event(事件)
- C#中的delegate委托类型基本学习教程
- C#_delegate - 用委托实现事件,Display和Log类都使用Clock对象
- Unity学习 - C#委托的介绍(delegate、Action、Func、predicate)
- C# Delegate(委托)与多线程
- 【C#基础】枚举(Enum)、结构体(Struct)、委托(Delegate)
- C#之委托delegate
- c#事件处理中事件信息EventArgs的使用和类型内部事件委托delegate的调用
- C# EventHandler and Delegate(委托的使用)
- C# Delegate(委托)与多线程
- C#中Delegate委托事件详细介绍
- C#中的委托(Delegate)
- C#的委托 delegate
- C#中的委托(Delegate)和事件(Event)
- C#委托的介绍(delegate、Action、Func、predicate)