- 委托:是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法)。
委托类型包含3个重要的信息:(方法签名)
1.它所调用的方法的名称;
2.该方法的参数(可选);
3.该方法的返回值类型(可选)
.NET委托既可以指向静态方法,也可以指向实例方法。
委托机制所利用的命名空间:System.MulticastDelegate与System.Delegate基类。
using System;
namespace SimpleDelegate
{
//这个委托可以指向任何传入两个参数并返回一个整数的方法
public delegate int BinaryOp(int x, int y); //定义委托类型
public class SimpleMath
{
public static int Add(int x, int y){
return x + y;
}
public static int Subtract(int x, int y){
return x - y;
}
}
class Program
{
static void Main(string[] args)
{
//创建委托对象
BinaryOp b = new BinaryOp(SimpleMath.Add);
//使用委托对象间接调用Add()方法
Console.WriteLine("使用委托对象--{0}",b(10, 10));
Console.ReadKey();
}
}
}
※如果要将目标对象方法插入指定委托对象,只要向委托的构造函数传入方法名称即可。
- 泛型委托
using System;
namespace GenericDelegate
{
//这个泛型委托可以调用任何返回void并接受单个参数的方法
public delegate void MyGenericDelegate<T>(T arg);
class Program
{
static void Main(string[] args)
{
Console.WriteLine("*** 泛型委托 ***\n");
//注册目标
MyGenericDelegate<string> strTarget = new MyGenericDelegate<string>(StringTarget);
strTarget("Some string data");
MyGenericDelegate<int> intTarget = new MyGenericDelegate<int>(IntTarget);
intTarget(9);
}
static void StringTarget(string arg){
Console.WriteLine("arg in uppercase is: {0}", arg.ToUpper());
}
static void IntTarget(int arg){
Console.WriteLine("++arg is: {0}", ++arg);
}
}
}
- 事件
事件:类似于异常,它们都是由对象引发(抛出,达到某种条件触发),并且可以通过我们提供的代码来处理,并且必须订阅它们;订阅一个事件的含义是提供代码,在事件发生时执行这些代码,它们称为事件处理程序。
定义一个事件分为两个步骤:1. 需要定义一个委托类型,它包含在事件触发时将要调用的方法;
2. 通过event关键字用相关委托声明这个事件。
- 匿名方法
- Lambda表达式