WEB开发网
开发学院软件开发C语言 C#3.0笔记(一)预备知识之Delegate 阅读

C#3.0笔记(一)预备知识之Delegate

 2009-04-06 08:24:13 来源:WEB开发网   
核心提示: 生成的Caculate类中定义了三个方法:BeginInvoke、EndInvoke、Invoke,其中Invoke是核心的方法,C#3.0笔记(一)预备知识之Delegate(2),它用来以同步的方式调用委托列表中的每个方法,我们可以看一看编译器是如何定义这几个方法的,4.Combine

生成的Caculate类中定义了三个方法:BeginInvoke、EndInvoke、Invoke。其中Invoke是核心的方法,它用来以同步的方式调用委托列表中的每个方法。我们可以看一看编译器是如何定义这几个方法的。Invoke方法中的参数跟返回值完全跟Caculate委托的定义一样的,而BeginInvoke中多了两个参数一个是AsyncCallback类型的一个是object类型的,EndInvoke方法返回Int类型。

通过MulticastDeletate跟Delegate基类获取更多信息

我通过上面的IL代码也可以看到编译器生成委托时的类是继承于MulticastDelegate的,而MulticastDelegate继承于Delegate类,所以可以通过这两个类来获取委托更多的辅助信息。在这里只列出一些常用的属性和方法,可以在msdn上获取更多地这两个类的内容(MulticastDelegate成员)。

1.Methos属性:返回System.Reflection.MethodInfo类型,描述委托所表示的方法信息。

2.Target属性:返回委托方法所在的对象,如果是静态方法即返回null。

3.GetInvocationList方法:返回一个Delegate类型的数组,其中数组的每个元素表示一个可以调用的方法。

4.Combine方法: 静态方法用来给委托添加一个方法。

5.Remove方法:静态方法给委托移除某个方法。

看下简单的Caculate的实现,CaculateClient类:

  public class CaculateClient
  {
    public int Add(int x, int y)
    {
      return x + y;
    }

    public int Subtract(int x, int y)
    {
      return x - y;
    }
  }

Tags:笔记 预备 知识

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接