c#中的代表是在类中声明吗?(什么是代表)

来源:百度知道 编辑:UC知道 时间:2024/05/18 00:29:49
using System;

delegate int MyDelegate();

public class MyClass {
public int InstanceMethod() {
Console.WriteLine("Call the instance method");
return 0;
}

static public int StaticMethod() {
Console.WriteLine("Call teh static method");
return 1;
}
}
public class Test{
static public void Main() {
MyClass p = new MyClass();
MyDelegate d = new MyDelegate(p.InstanceMethod);
d();
d = new MyDelegate(MyClass.StaticMethod);
d();
Console.ReadLine();
}
}

delegate翻译过来是委托!

在C#中使用一个类时,分两个阶段。首先需要定义这个类,即告诉编译器这个类由什么字段和方法组成。然后(除非只使用静态方法)实例化类的一个对象。使用委托时,也需要经过这两个步骤。首先定义要使用的委托,对于委托,定义它就是告诉编译器这种类型代表了哪种类型的方法,然后创建该委托的一个或多个实例。
定义委托的语法如下:
delegate void VoidOperation(uint x);
在这个示例中,定义了一个委托VoidOperation,并指定该委托的每个实例都包含一个方法的细节,该方法带有一个uint参数,并返回void。理解委托的一个要点是它们的类型安全性非常高。在定义委托时,必须给出它所代表的方法的全部细节。
提示:
理解委托的一种好方式是把委托的作用当作是给方法签名指定名称。
假定要定义一个委托TwoLongsOp ,该委托代表的函数有两个long型参数,返回类型为double型,可以编写如下代码:
delegate double TwoLongsOp(long first, long second);
或者定义一个委托,它代表的方法不带参数,返回一个string型的值,则可以编写如下代码:
delegate string GetAString();
其语法类似于方法的定义,但没有方法体,定义的前面要加上关键字delegate。因为定义委托基本上是定义一个新类,所以可以在定义类的任何地方定义委托,既可以在另一个类的内部定义,也可以在任何类的外部定义,还可以在命名空间中把委托定义为顶层对象。根据定义的可见性,可以在委托定义上添加一般的访问修饰符:public、 private和 protected等:
public delegate string GetAString();
注意:
实际上,“定义一个委托”是指“定义一个新类”。委托实现为派生于基类System.MulticastDelegate的类,System.MulticastDelegate又派生于基类System.Delegate。C#编译器知道这个类,使用其委托语法,因此我们不需要了解这个类的具体执行情况,这