委托简介
2015-07-27 10:34
295 查看
1 委托的概念:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
2委托的注意事项
2.1 委托的定义和方法的定义类似,只是在前面加了一个delegate,但委托不是方法,它是一种类型。是一种特殊的类型,看成是一种新的对象类型比较好理解。用于对与该委托有相同签名的方法调用。
2.2委托相当于C++中的函数指针,但它是类型安全的。
2. 3委托是从System.Delegate派生,但不能象定义常规类型一样直接从System.Delegate派生,对委托的声明只能通过上面的声明格式进行定义。关键字delegate通知编译器这是一个委托类型,从而在编译的时候对该类进行封装,对这一过程C#定义了专门的语法来处理这一过程。
2.4 不能从一个委托类型进行派生,因为它也是默认sealed的
2.5委托即可以对静态方法进行调用也可以对实例方法进行调用。
2.6每个委托类型包含一个自己的调用列表,当组合一个委托或从一个委托中删除一个委托时都将产生个新的调用列表。
2.7两个不同类型的委托即使它们有相同的签名和返回值,但还是两个不同类型的委托。但其实在使用中可看作是相同的。
3例子:
3.1声明委托
delegate 返回值类型 委托类型名(参数)
例如:delegate void SayHello(string name);
3.2 准备一个方法(和委托具有相同的签名)
例如: static void SayHi(string name)
{
Console.WriteLine(“Hi,” + name);
}
3.3 创建委托对象
SayHello sh = new SayHello(SayHi);
3.4委托调用
sh(“peter”);
委托还可以追加和删除方法,实际调用的是combine和remove方法
2委托的注意事项
2.1 委托的定义和方法的定义类似,只是在前面加了一个delegate,但委托不是方法,它是一种类型。是一种特殊的类型,看成是一种新的对象类型比较好理解。用于对与该委托有相同签名的方法调用。
2.2委托相当于C++中的函数指针,但它是类型安全的。
2. 3委托是从System.Delegate派生,但不能象定义常规类型一样直接从System.Delegate派生,对委托的声明只能通过上面的声明格式进行定义。关键字delegate通知编译器这是一个委托类型,从而在编译的时候对该类进行封装,对这一过程C#定义了专门的语法来处理这一过程。
2.4 不能从一个委托类型进行派生,因为它也是默认sealed的
2.5委托即可以对静态方法进行调用也可以对实例方法进行调用。
2.6每个委托类型包含一个自己的调用列表,当组合一个委托或从一个委托中删除一个委托时都将产生个新的调用列表。
2.7两个不同类型的委托即使它们有相同的签名和返回值,但还是两个不同类型的委托。但其实在使用中可看作是相同的。
3例子:
3.1声明委托
delegate 返回值类型 委托类型名(参数)
例如:delegate void SayHello(string name);
3.2 准备一个方法(和委托具有相同的签名)
例如: static void SayHi(string name)
{
Console.WriteLine(“Hi,” + name);
}
3.3 创建委托对象
SayHello sh = new SayHello(SayHi);
3.4委托调用
sh(“peter”);
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void SayHi(string name) { Console.WriteLine("Hi," + name); } delegate void SayHello(string name); static void Main(string[] args) { SayHello sh = new SayHello(SayHi); sh("peter");//实际使用sh.Invoke("peter"); Console.ReadKey(); } } }
委托还可以追加和删除方法,实际调用的是combine和remove方法
相关文章推荐
- 线性插值算法
- iphone开发必知点之--app图标设置
- sql函数PadLeft与PadRight代码实例
- EK算法模板
- mysql dateformate
- 验证点是否在三角形内
- 两种对 URL 的散列效果很好的函数
- 深入剖析Java中的装箱和拆箱
- 网易新闻iOS版使用的开源组件
- Linux内核线程
- 去除JSP页面自动生成的空行
- QTableWidget详解(样式、右键菜单、表头塌陷、多选等) (非代理)
- HDU 3549 基础网络流EK算法 Flow Problem
- VC++ 学习笔记(三):摩登之路——C++/CLI简介
- Hibernate4 用Discriminator之后 select问题
- 数字图像处理中常用的插值方法
- lufylegend库 LBitmapData LBitmap LSprite
- Android 快速开发系列 打造万能的ListView GridView 适配器
- org.apache.commons.lang.math.NumberUtils 工具类
- PAT (Advanced Level) 1054. The Dominant Color (20) 找过半的数,一次遍历