博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
委托和事件
阅读量:5152 次
发布时间:2019-06-13

本文共 1136 字,大约阅读时间需要 3 分钟。

1、委托是一个或多个函数指针的抽象,委托是类型安全的、面向对象和安全可靠的

2、使用步骤
  声明委托public delegate int DelegateClass (string info)
  使用new关键字创建委托的一个实例DelegateClass obj1 = new DelegateClass(MethodA)
  使用调用运算符()激活一个委托obj1("1")或者显式调用obj1.Invoke("2")
  当对象不需要委托的时候,将委托实例设为null
3、委托不能作为一个类的数据成员,也不能作为方法中的一个局部变量
4、多个函数假如委托时,这些函数根据先进先出的顺序被调用
5、对于实例方法,使用object.method格式,对于静态方法,使用class.method格式,如果静态方法和委托在同一个类中,则不需要类名
public delegate void DelegateClass();
    class Program
    {
        static void Main(string[] args)
        {
            DelegateClass del1 = new DelegateClass(Program.MethodA);
            DelegateClass del2 = new DelegateClass(MethodA);

            ZClass obj = new ZClass();

            DelegateClass del3 = new DelegateClass(obj.MethodB);

        }

        public static void MethodA()

        { }
    }

    public class ZClass

    {
        public void MethodB()
        { }
    }
6、函数引用可以直接赋给委托,而不用new运算符,这就是委托推理
 DelegateClass del1 =Program.MethodA;
DelegateClass del2 = MethodA;

ZClass obj = new ZClass();

DelegateClass del3 = obj.MethodB;
7、函数引用的签名必须匹配目标委托的签名。通过逆变和协变可以拓展这种匹配
8、异步调用
  BeginInvoke方法:
  可以在容纳了一个函数引用的委托上被调用
  IAsyncResult BeginInvoke(arguments , AsyncCallback callback , object asyncState) 

转载于:https://www.cnblogs.com/changweihua/archive/2011/09/13/2175072.html

你可能感兴趣的文章
https://blog.csdn.net/u012106306/article/details/80760744
查看>>
海上孤独的帆
查看>>
处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Manag
查看>>
01: socket模块
查看>>
mysql触发器
查看>>
淌淌淌
查看>>
win10每次开机都显示“你的硬件设置已更改,请重启电脑……”的解决办法
查看>>
C++有关 const & 内敛 & 友元&静态成员那些事
查看>>
函数积累
查看>>
Swift 入门之简单语法(六)
查看>>
〖Python〗-- IO多路复用
查看>>
栈(括号匹配)
查看>>
Java学习 · 初识 面向对象深入一
查看>>
源代码如何管理
查看>>
vue怎么将一个组件引入另一个组件?
查看>>
bzoj1040: [ZJOI2008]骑士
查看>>
LeetCode 74. Search a 2D Matrix(搜索二维矩阵)
查看>>
利用SignalR来同步更新Winfrom
查看>>
反射机制
查看>>
CocoaPod
查看>>