委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。
1.委托的声明
Delegate 类
Delegate是一种引用类型,我们在处理他的时候要当作类来看待而不是方法,说白了委托就是对方法或者方法列表的引用,调用一个委托实例就好像是调用c++中的指针一 样,他封装了对制定方法的引用,或者说委托起到的是桥梁的作用,实例后的委托对象会将给定的参数传递给他所回调的方法,并去执行方法。
Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。
例:public delegate int MethodtDelegate(int x, int y);表示有两个参数,并返回int型。
public delegate void myDelegate(string str); public static void HellowChinese(string strChinese) { Console.WriteLine("Good morning," + strChinese); Console.ReadLine(); } myDelegate d = new myDelegate(HellowChinese); d("Mr wang");
匿名方法
c#中几个常用的委托(Action,Func,predicate)
Action 是无返回值的泛型委托
public delegate void Action<in T1, in T2, in T3, in T4>( T1 arg1, T2 arg2, T3 arg3, T4 arg4 )
Action 是对委托的使用的简化
public static void HellowChinese(string strChinese) { Console.WriteLine("Good morning," + strChinese); Console.ReadLine(); } Action<string> action = HellowChinese; action("Spring.");
Func 是有返回值的泛型委托
public delegate TResult Func<in T1, in T2, in T3, out TResult>( T1 arg1, T2 arg2, T3 arg3 )
Func 也是对委托的使用的简化
public static string HelloEnglish(string strEnglish) { return "Hello." + strEnglish; } Func<string, string> f = HelloEnglish; Console.WriteLine(f("Srping ji")); Console.ReadLine();
prediccate 是返回bool型的泛型委托,且有且只有一个参数
public delegate bool Predicate<in T>( T obj )
关于委托和事件的使用
委托可以将方法当作参数传递,事件是一个特殊的委托,事件相当于一个button按钮的动作
在方法里面的参数传入委托的形式参数方法,在方法里面调用该方法
在其它地方调用该方法时,参数可以传递方法。
事件:声明委托和事件后
在方法中调用该事件
其它地方调用上述方法时就会执行该事件
自定义控件中声明时间可以当控件的事件使用加上on事件名称