标签:
委托:delegate是表?将?法作为参数传递给其他?法。委托类似于函数指针,但与函数指针不同的是,委托是?向对象
的、类型安全的和保险的。 委托既能引?静态?法,也能引?实例?法。
委托是?个类,它定义了?法的类型,使得可以讲?法当做另??法的参数来进?传递,这种将?法动态地赋给参
数的做法,可以避免在程序中?量使?IF-Else( Switch)语句,同时使程序具有更好的可扩展性。
委托对象的?个有?属性是:可以使? + 运算符将多个对象分配给?个委托实例。多播委托包含已分配委托的
列表。 在调?多播委托时,它会按顺序调?列表中的委
托。 注意: 只能合并相同类型的委托。
当使?事件设计模式时。
当封装静态?法可取时。
当调??不需要访问实现该?法的对象中的其他属性、?法或接?时。
需要?便的组合
当类可能需要该?法的多个实现时。
委托的声明原型如下:
delegate <函数返回类型> <委托名> (<函数参数>)
委托的使?分以下三步:
1.委托声明
2.委托实例化
3.委托的调用
class Program { public delegate void Greeting(string name); public static void EnglishGreeting(string name) { Console.WriteLine("Good morning!~" + name); } public static void ChineseGreeting(string name) { Console.WriteLine("早上好!~" + name); } static void Main(string[] args) { Greeting greet; greet = ChineseGreeting; greet += EnglishGreeting; greet("张三"); Greeting gre = new Greeting(ChineseGreeting); gre += EnglishGreeting; gre("张三"); } }
事件:类或对象可以通过事件向其他类或对象通知发?的相关事情。 发送(或引发)事件的类称为“发?者”,接收(或处理)事件的类称为“订户”。
注意: C#事件本质就是对消息的封装。
由来:委托在某种程度上,破坏了对象的封装性。委托第?个?法注册?的是“=”,是赋值语句,因为要进?实例
化,第?个?法注册的时候?的是“+=”。但是,不管是赋值还是注册,都是将?法绑定到了委托上,除了调?
时的先后顺序不同,在没有任何的区别。这样使?起来很别扭,于是event,出场了!
是事件封装了委托类型的变量,相当于为委托类型量?定制的属性( Property)。
优点:在类的内部,不管声明它是public还是protected,他总是private的。
在类的外部,注册“+=”和注销“-=”的访问限定符与声明事件时使?的访问限定符相同。
class Program { public delegate void Greeting(string name); public class GreetingManger { public event Greeting MakeGreet; public void GreetPeople(string name) { MakeGreet(name); } } public static void EnglishGreet(string name) { Console.WriteLine("Good Morning!~" + name); } public static void ChineseGreet(string name) { Console.WriteLine("早上好!" + name); } static void Main(string[] args) { GreetingManger gre = new GreetingManger(); gre.MakeGreet += EnglishGreet; gre.MakeGreet += ChineseGreet; gre.GreetPeople("张三"); } }
c#阶段至此基本上就告一段落了 接下来是地狱 U-3D
有点小激动呢
标签:
原文地址:http://www.cnblogs.com/little-sun/p/4351752.html