委托
private delegate string GetAString();//委托的定义,使用delegate关键字
//两种指向方法的写法
GetAString a = new GetAString(x.ToString);//a指向了x中的tostring方法
GetAString a = x.ToString;
//两种调用方法
string s = a();//通过委托实例去调用 x中的tostring方法
string s = a.Invoke();//通过invoke方法调用a所引用的方法
Action委托
无返回值 Action<参数1,参数2.....>名字=方法;
Fun委托
有返回值 FUN<参数1,参数2,...,返回值>名字=方法;
delegate关键字
还可以用来声明匿名方法
Func<int, int, int> plus = delegate(int arg1, int arg2)
{
return arg1 + arg2;
};
匿名方法可以用lambda表达式代替
Func<int, int, int> plus = (arg1, arg2) =>// lambda表达式的参数是不需要声明类型的
{
return arg1 + arg2;
};
事件event
namespace 事件 {//Event
class Program
{
public delegate void MyDelegate();
//public MyDelegate mydelgate;//声明了一个委托类型的变量,作为类的成员
public event MyDelegate mydelgate;//声明了一个委托类型的变量,作为类的成员
static void Main(string[] args)
{
Program p = new Program();
p.mydelgate = Test1;
p.mydelgate();
Console.ReadKey();
}
static void Test1()
{
Console.WriteLine("test1");
}
}
}
事件也是一个委托,是一个有特殊限制的委托,只能在类的内部声明,事件不能再类的外部触发,只能在类的内部触发。
另外委托和事件都可以通过+=和-=来操作其中的方法的队列。