委托
委托的特点有:
1、委托是一种特殊的对象类型,特殊之处在于,以前定义的所有对象都包含数据,而委托包含的只是方法的地址。
2、委托类似于c++中的函数指针,但它是类型安全的。
3、委托可用于定义将方法作为参数进行传递。
4、委托可用于定义回调方法。
5、委托可以链接在一起。
6、方法不必与委托签名完全匹配。
委托的定义:
定义委托的语法类似于方法的定义,但没有方法体,定义的前面要加上关键字delegate.定义一个委托基本上算是定义一个新类,所以可以在定义类的任何地方定义委托,既可以在另一个类的内部定义,也可以在任何类的外部定义,还可以在命名空间中把委托定义为顶层对象。由定义的可见性可添加修饰符:public、private和protected等。
委托的定义语法:
public delegate void MyFirstDelegate(string message);
其中public修饰符、void返回语类型、与“()”括号内的参数可根据实际情况更改;
委托的调用注意点:
委托调用的方法的返回类型和方法的参数类型和个数必须与签名一致,而方法的类型可为实例方法也可为静态方法均可!
委托中的匿名方法:
使用匿名方法的好处是:不必创建单独的方法,减少了委托所需要的编码系统开销。如例:
public delegate void MyDelegate(string s);
class MyTest
{
static void Main(string[] args)
{
MyDelegate myDel = delegate(string j)
{
System.Console.WriteLine(j);
};
myDel("使用匿名方法实例化委托");
myDel = new MyDelegate(MyTest.DoWork);
myDel("不使用匿名方法实例化委托");
Console.ReadKey();
}
static void DoWork(string k)
{
System.Console.WriteLine(k);
}
}
实例中粉红字部分则为匿名委托,注意:在匿名委托中不能访问任何不安全的代码块,也不能访问ref和out参数。
Lambda表达示:
Lambda运算符“=>”读为“goes to”,Lambda运算符左边是输入参数,右边包含表达示或语句块。例:“x=>x*x”读做:“x goes to x times x”
多重委托:
注意:必须是相同类型的委托利用“+”或“-”运算符进行组成多重委托,是对调用方法的添加。
委托与接口的使用情况:
委托的使用情况:
1、一般在开发事件设计模式时,要使用委托。
2、当封装静态方法可取时,使用委托也比较好。
3、当调用方不需要访问实现该方法的对象中的其它属性、方法或接口时或需要方便地调用方法时,使用委托比较好。
接口的使用情况:
1、当存在一组可能被调用的相关方法时。
2、当类只需要方法的单个实现时。
3、当使用接口的类想要将该接口强制转换为其他接口或类型时。
4、当正在实现的方法链接到类的类型或标识时。