一 、
1、让函数以变量的身份出现,成为别人的参数。
2、int f(int x,int y); //定义一个函数
g(f) //该函数作为参数,对应于C语言的函数指针
3、
例子:
delegate int D(intx, int y) //定义一个类,是委托类型D
class A
{
static int f (int x,int y)
{
return x+y;
}
static void main()
{
D d = f; //生成D类的一个对象d,把f作为d的初值函数
int z = int d(1,2); //z为对象d的返回值
Console.WriteLine("z = {0}",z);
}
}
二、
1、class和delegate处于同等地位,可以使用protected,private,public等修饰符进行修饰
2、初始化对比:
class A = new class(); // 初始化类A
D d = new D(f); // f是一个函数,是D的参数
D d = new D(); //错误,因为委托类型D必须有构造函数的参数
D d = f ; //不适用new 关键字
3、委托赋值:
D d = f(); //错误
D d = f(int x,int y); //错误,这个时候d是f的替身,所以在y中带参数
d(3,2); //正确
d.Invoke(3,2); //正确,使用Invoke方法
三、
1、符合委托签名的函数都可以使用委托,静态函数和对象函数都可以
2、例子:
class B
{
public int f(int x,int y)
{
return x*y;
}
}
B b = new B(); //生成类B的对象b
delegate int D(int x,int y); //定义一个委托类D
D d = b.f; //定义委托对象的委托事件是对象b的函数
四(委托做参)、
1、委托作用:主要用在运行时才能决定的动作,这些动作在事先是不知道的。例如用户选择的操作是什么,编程者并不知道。这个时候要用到委托事件。
2、委托是一个函数的替身,委托是委托类的对象,就可以类似于 int x这样的整形变量作为函数参数进行传递。
例子:
delegate void D(string s); //定义一个委托类D
class A
{
static void read(string s)
{
Console.WriteLine("读" + s);
}
static void write(string s)
{
Console.WriteLine("写" + s);
}
static void study(string s,D d) //定义类一个函数study,有两个参数,一个是字符串s另一个是委托对象d
{
d(s);
}
static void Main()
{
study("三国",read); //该study函数参数d使用的是本类的read函数,拿read来代替d,相当于D d =read;
study("红楼",write);
Console.Read();
/*
或者
D d1 = read;
D d2 = write;
study("三国",d1);
study("红楼",d2);
*/
}
}
对比:
class A
{
string x;
string y;
void study(string z)
{
Console.WriteLine(z);
}
void main()
{
study(x);
study(y);
}
}