C#中的事件和委托_札记1
委托
自定义委托_静态方法(被委托)
-
委托是一种类型 ,所以任何定义类的地方都可以定义委托类型;
-
自定义委托的基本格式示例如下:
/// <summary>
/// 自定义声明一个无参数无返回值的委托
/// </summary>
public delegate void MyDelegate();
- 定义一个与委托参数和返回值一致的静态方法(首先测试静态方法)
/// <summary>
/// 定义一个方法_没有参数没有返回值_静态方法
/// </summary>
public static void Test_static()
{
Console.WriteLine("测试自定义委托的使用_无参数无返回值_静态方法");
}
- 在Main方法中实例化委托的第一种方法_标准方法
//实例化委托的第一种方法_标准方法
MyDelegate myDelegate1 = new MyDelegate(Test_static);
- 在Main方法中实例化委托的第一种方法_简写方法(推荐)
//实例化委托的第二种方法_简写方法
MyDelegate myDelegate2 = Test_static;
- 自定义委托的调用
//自定义委托的调用
myDelegate1.Invoke();
myDelegate2.Invoke();
思考1:被委托的方法只能是静态方法吗? 答案是:NO
自定义委托_实例方法(被委托)
- 我们先定义一个方法_没有参数没有返回值_实例方法
/// <summary>
/// 定义一个方法_没有参数没有返回值_实例方法
/// </summary>
public void Test()
{
Console.WriteLine("测试自定义委托的使用_无参数无返回值_实例方法");
}
-
自定义委托_实例方法(被委托) 的调用
需要先对实例方法所在的类进行实例化
Listing01_01 program = new Listing01_01();
然后再使用对象调用方法的方式对委托进行赋值操作和调用
MyDelegate myDelegate3 = program.Test;
myDelegate3.Invoke();
多播委托
多播委托其实说白了就是连续执行多个被委托的方法,可以使用操作符+=或-=实现
- 我们再定义另一个方法_测试多播委托的使用
/// <summary>
/// 定义另一个方法_测试多播委托的使用
/// </summary>
public static void Test_static2()
{
Console.WriteLine("测试自定义多播委托的使用_无参数无返回值_静态方法");
}
2.我们进行多播委托的+=操作
myDelegate1 += Test_static2;
myDelegate1.Invoke();
运行结果:
3.我们再进行多播委托的-=操作
myDelegate1 -= Test_static;
myDelegate1.Invoke();
运行结果:
系统委托
系统委托的使用_静态方法(被委托)
- 系统委托Action不需要定义可以直接使用
- 系统委托Action实例化的第一种方法_标准方法
Action action1 = new Action(Test_static);
3.系统委托Action实例化的第一种方法_简写方法(推荐)
Action action2 = Test_static;
4.系统委托的调用
//系统委托的调用
action1.Invoke();
运行结果:
系统委托的使用_实例方法(被委托)
1.直接上代码
#region 系统委托的使用_实例方法(被委托)
Console.WriteLine("******系统委托的使用_实例方法(被委托)******");
Action action3 = new Action(program.Test);
//系统委托的调用
action3.Invoke();
Console.WriteLine();
#endregion
系统委托的使用_调用有参数有返回值的静态方法(被委托)
1.我们先定义一个方法_有参数有返回值_静态方法
/// <summary>
/// 定义一个方法_有参数有返回值_静态方法
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
public static int Test3(int num)
{
return num;
}
2.我们使用系统委托函数Func来实现
//系统委托的调用
Func<int, int> func = Test3;
int i = func.Invoke(3);
Console.WriteLine(i);
系统委托的使用_调用有参数有返回值的实例方法(被委托)
1.直接上代码,不赘述
#region 系统委托的使用_调用有参数有返回值的实例方法(被委托)
Console.WriteLine("******系统委托的使用_调用有参数有返回值的实例方法(被委托)******");
//系统委托的调用
Func<int, int> func1 = program.Test4;
int j = func.Invoke(4);
Console.WriteLine(j);
Console.WriteLine();
#endregion