zoukankan      html  css  js  c++  java
  • C#委托

        C#委托可以看做是方法引用,或者叫方法指针,它和c++中使用的函数指针最大的区别就是委托是类型安全的。

        委托声明时必须将方法的返回值和详细的参数列表列出来,这样在为委托指定方法时,可以进行类型安全的检查。

        委托声明的方式如下:

      public delegate int AddHandler(int value);

         委托的关键字是delegate,除去这个关键字,其余部分就是一个完整的方法签名的格式,包括了委托返回类型、委托名称和委托所需的详细参数列表。

          为委托指定方法有以下几种方式:

    • 通过实例化委托对象的方式来指定方法
      Code
    • 通过直接指定的方式来为委托指定方法
      Code
    • 通过匿名方法的方式来为委托指定方法
      Code

         使用委托的方式:

      addHandler(5);

         一个委托可以指定多个方法,当一个委托被指定多个方法后,在执行委托时,它指定的方法会被依次调用。

      Code

         我们通过+=操作来为委托添加方法,通过-=操作来为委托去除方法。

         有时,委托和接口会发生混淆,委托和接口都允许类设计器分离类型声明和实现。给定的接口可由任何类或结构继承和实现;可以为任何类中的方法创建委托,前提是该方法符合委托的方法签名。接口引用或委托可由不了解实现该接口或委托方法的类的对象使用。

      Code
         我们可以按照以下的方式来使用Test方法
      Test(program.Add, 5);
         但是我们也可以使用接口的方式来实现上面委托实现的功能
      Code

         我们可以按照以下的方式来使用MyTest方法

      MyAddhandler addHandler = new MyAddhandler();
      MyTest(addHandler, 
      5);

         那么如何去却分委托和接口呢,MSDN上是这么建议的:

         在以下情况中使用委托:

    • 当使用事件设计模式时。

    • 当封装静态方法可取时。

    • 当调用方不需要访问实现该方法的对象中的其他属性、方法或接口时。

    • 需要方便的组合。

    • 当类可能需要该方法的多个实现时。

         在以下情况中使用接口:

    • 当存在一组可能被调用的相关方法时。

    • 当类只需要方法的单个实现时。

    • 当使用接口的类想要将该接口强制转换为其他接口或类类型时。

    • 当正在实现的方法链接到类的类型或标识时:例如比较方法。

  • 相关阅读:
    一个开源库:720全景显示
    如何查看mac系统是32位还是64位的操作系统
    iOS ASIHTTPRequest 使用指南
    iOS block里的self
    苹果公司给出的检测 advertisingIdentifier 的方法
    App Store idfa被拒检查办法
    iOS苹果开发者客服电话地址
    iOS项目的目录结构和开发流程(Cocoa China)
    CFBundleVersion与CFBundleShortVersionString
    In App Purchase Statuses
  • 原文地址:https://www.cnblogs.com/wing011203/p/1280250.html
Copyright © 2011-2022 走看看