zoukankan      html  css  js  c++  java
  • C#-委托(十七)

    概述
      委托(Delegate) 是存有对某个方法的引用的一种引用类型变量
      委托特别用于实现事件和回调方法。所有的委托都派生自 System.Delegate 类
      委托是一个类,么它就可以被定义在任何地方,即可以定义在类的内部,也可以定义在类的外部
      委托是一种类型安全的函数回调机制, 不仅能够调用实例方法,也能调用静态方法,并且具备按顺序执行多个方法的能力
      委托只是个命令,做事情是别人,自己本身是不用做事情的
     
    声明
    public delegate int MyDelegate (string s);
      delegate:委托声明的关键字
      MyDelegate:委托名称
      int:返回类型

    实例 
     1 using System;
     2 namespace ConsoleApp1
     3 {
     4     public class Employee
     5         {
     6                 public static void WatchMovie()
     7                 {
     8                         Console.WriteLine("go to watch movie");
     9                 }
    10         }
    11         public class Boss
    12         {
    13                 // 声明一个委托
    14                 public delegate void ToWatchMovie();
    15                 public static void Main(string[] args)
    16                 {
    17                         // 委托具体做的事情
    18                         ToWatchMovie BossCommand = new ToWatchMovie(Employee.WatchMovie);
    19                         BossCommand();
    20                         Console.ReadKey();
    21                 }
    22         }
    23 }
    结果
      

     
    委托链
      一个委托做多件事,将做的事情拼接起来
      只有相同类型的委托可被合并
      使用 "+" 运算符进行合并
      "-" 运算符可用于从合并的委托中移除组件委托
      可以再创建一个委托被调用时要调用的方法的调用列表。这被称为委托的 多播(multicasting),也叫组播
     
    实例 
     1 using System;
     2 namespace ConsoleApp1
     3 {
     4     public class Employee
     5         {
     6                 public static void WatchMovie()
     7                 {
     8                         Console.WriteLine("go to watch movie");
     9                 }
    10                 public static void Eat()
    11                 {
    12                         Console.WriteLine("go to eat");
    13                 }
    14         }
    15         public class Boss
    16         {
    17                 // 声明委托
    18                 public delegate void BossCommand();
    19                 public static void Main(string[] args)
    20                 {
    21                         // 委托具体做的事情
    22                         BossCommand BC;
    23                         BossCommand BC1 = new BossCommand(Employee.WatchMovie);
    24                         BossCommand BC2 = new BossCommand(Employee.Eat);
    25                         BC = BC1 + BC2;
    26                         BC();
    27                         Console.ReadKey();
    28                 }
    29         }
    30 }
    结果


     
  • 相关阅读:
    WPF换肤之八:创建3D浏览效果
    ADPlus
    由INotifyPropertyChanged,BindingList绑定引发的跨线程异常及其解决办法
    无服务器端的UDP群聊功能剖析(重构版本)
    A Short Guide to DBI[转]
    绑定到异步的ObservableCollection
    使用反射+缓存+委托,实现一个不同对象之间同名同类型属性值的快速拷贝
    ORM查询语言(OQL)简介概念篇
    无需重新编译代码,在线修改表单
    LJMM平台( Linux +Jexus+MySQL+mono) 上使用MySQL的简单总结
  • 原文地址:https://www.cnblogs.com/tynam/p/9996854.html
Copyright © 2011-2022 走看看