CSharp_delegate简单讲解;
2014-03-25 09:44
302 查看
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace workroom { /// <summary> /// 委托(delegate):委托调用静态方法或者实例方法; /// 资料出处:http://zhidao.baidu.com/link?url=KiyFngnhaajRK56fW6gZfkrkF2qPlav2pHjYvdmVp12daeJJ3mvDEm2TKqOPwmLoJE_c-ZCk2EkmbWN1uH9E-a; /// </summary> class DelegateClass { //1.定义Delegate函数数据结构; public delegate void GoDelegate(); // 绑定的方法没有参数; //2.定义Delegate将引用的静态方法或引用类实例及其实例方法; public static void MyDelegateStaticFunc() { Console.WriteLine("-->delegate function..."); } [STAThread] static void Main(string[] args) { //3.Delegate数据变量_指向->实例方法 GoDelegate goDelegate = new GoDelegate(MyDelegateStaticFunc); //4.通过Delegate数据变量_执行实例方法 goDelegate(); //狮子(LionDelegateClass)的属性显示(ShowAnimalType)方法调用 LionDelegateClass lionDelegate = new LionDelegateClass(); lionDelegate.ShowAnimalType("DelegateClass"); //马(HorseDelegateClass)的属性显示(ShowAnimalType)方法调用 HorseDelegateClass horseDelegate = new HorseDelegateClass(); horseDelegate.ShowAnimalType("DelegateClass"); // 狗 (DogDelegateClass)的属性显示(ShowAnimalType)方法调用 DogDelegateClass dogDelegate = new DogDelegateClass(); dogDelegate.ShowAnimalType("DelegateClass"); } /// <summary> /// 狗(DogDelegateClass)_多路委托 /// 在C#中,委托(Delegate)类是多路委托,这就说可以同时指向多个处理函数, /// 并且可以按照委托的先后顺序,执行相应的函数。 /// </summary> public class DogDelegateClass : MyAnimalDelegateClass { public DogDelegateClass() { //多路委托函数 设定 this.delegateFunction = new DelegateFunction(subFunction31); this.delegateFunction += new DelegateFunction(subFunction32); } //委托函数1 private void subFunction31(string parameter) { System.Console.WriteLine( string.Format("-->[{0}]This is a dog....", parameter)); } //委托函数2 private void subFunction32(string parameter) { System.Console.WriteLine( string.Format("-->[{0}]This is a nice dog....", parameter)); } } /// <summary> /// 马(HorseDelegateClass) /// </summary> public class HorseDelegateClass : MyAnimalDelegateClass { public HorseDelegateClass() { // 为委托绑定实例方法 this.delegateFunction = new DelegateFunction(subFunction2); } //马(HorseDelegateClass)实例方法的实装 private void subFunction2(string parameter) { System.Console.WriteLine(string.Format("-->[{0}]This is a horse....", parameter)); } } /// <summary> /// 狮子(LionDelegateClass) /// </summary> public class LionDelegateClass : MyAnimalDelegateClass { public LionDelegateClass() { // 为委托绑定实例方法 this.delegateFunction = new DelegateFunction(subFunction1); } //狮子(LionDelegateClass)实例方法的实装 private void subFunction1(string parameter) { System.Console.WriteLine(string.Format("-->[{0}]This is a lion....", parameter)); } } /// <summary> /// 动物基类(MyAnimalDelegateClass) /// </summary> public class MyAnimalDelegateClass { // 定义delegate函数->用于声明delegate变量_Delegate函数数据结构 public delegate void DelegateFunction(string parameter); // 委托方法需要parameter参数; // 定义定义delegate变量->用于绑定相应方法(此处在子类绑定)_Delegate类型属性 private DelegateFunction m_delegateFunction = null; public DelegateFunction delegateFunction { get { return m_delegateFunction; } set { m_delegateFunction = value; } } /// <summary> /// 属性显示(ShowAnimalType)方法 /// </summary> /// <param name="strFuncName"></param> public void ShowAnimalType(string parameter) { // 如果delegate变量存在(说明子类已绑定到子类方法) if (delegateFunction != null) { object[] args = { parameter }; //调用Delegate引用的实例方法 delegateFunction.DynamicInvoke(args); } } } } } //执行结果: //-->delegate function... //-->[DelegateClass]This is a lion.... //-->[DelegateClass]This is a horse.... //-->[DelegateClass]This is a dog.... //-->[DelegateClass]This is a nice dog....
相关文章推荐
- C#中的delegate与event简单讲解
- 简单讲解c#委托delegate的用途
- Intellij Idea12第一个安卓程序开发(HelloWorld)及简单讲解Android
- 如何简单形象又有趣地讲解神经网络是什么?
- java里面的FutureTask简单使用(配合源码讲解)
- 建立最简单的repo服务器实例讲解
- CSS:简单讲解position属性
- [ASP.NET]uploadify简单使用讲解
- Webmagic简单的讲解
- 简单易懂的Dancing links讲解(1)
- 实例讲解PHP设计模式编程中的简单工厂模式
- 设计模式 篇 单子模式 门面模式 适配器 工厂模式 观察者模式 命令者模式 装饰者模式 代理模式 简单讲解
- Scrapy简单入门及实例讲解与安装
- 简单讲解C#反射之Assembly
- android contentprovider简单讲解
- 建立最简单的repo服务器实例讲解 推荐
- MySQL字符集乱码简单讲解
- CocoStudio sample讲解 SampleCollision骨骼动画与简单碰撞
- 简单工厂模式实例与讲解
- 简单讲解Python中的闭包