为什么说委托相当于C/C++中的指针,...那么是谁指向谁???? 为什么说委托相当C/C++中的指针,那么是委托本身是一个充当指针角色,是不是它本身就是一个介绍人,那它把什么介绍给什么???有没有人能细细的剖析一下.也可以提供相关的资料,中英文的都行.谢了... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 委托不是是一个类,而不是方法。委托类的实例是一个事实在在的对象,有着非常多的属性和方法,它与普通对象一样被管理。例如GC之所以能管理它,就是因为它有足够的信息表明自己是怎样的对象,而所谓的“方法指针”怎没有这样的能力。委托实际上管理一个委托集合(数组),而方法指针如何自己管理指针的集合?既然是集合,当然就要有追加、查找、删除特定元素(委托)的能力。委托是强类型的!因此委托的参数个数、类型等不可胡乱调用。这大大增强了程序的逻辑表达的可靠性、可理解性。而方法指针,相对委托来说,只是一个粗浅、不知所云的含糊名词。它使用反射,在运行时产生大量动态对象,并用来作为参数执行所包装的方法。因此它的方法中你访问this(或者vb的me),一个各种参数的类型等,可以获得正确的指示。这不是方法指针所具有的能力。即使内部运行中一些无法强类型的地方,委托也花了大代价在运行时检查其参数类型、大小等边界条件,而不是不管这些约束条件没头没脑地“按照指针”去调用。 如果按照谭浩强的C去理解.Net的委托,就像按照向下人自家院子里的简易鸡窝去理解大城市里的商业街的设计布局,差的太远了。 如果方法相当于一个动词,委托相当于一个动名词class 人类{ //构造函数代码略 public void 好()}//分别new 一个人类的实例:我、他 (代码略 )public void delegate 好(); 好 他好=new 好(他.好)好 我好=new 好(我.好)好 大家好=他好+我好嘿嘿,汇仁肾保:)委托用于相加的地方,加法重载委托和类是一个级别的概念,可以new 委托其实就是函数指针,它最大用处是用在消息处理上的,你随便拉一个BUTTON控件,再双击一下,再去看看系统自动生成的代码,那是委托的经典应用。 在托管编程的情况下,C#中不存在指针概念;委托相当于C++中的指向函数的指针,这是便于那些曾经学过C/C++的人容易理解委托的作用。但在C#中委托是一种对象,而且是一种可以序列化的实实在在的C#基础对象,具体的东西上面已经有人详细的解释过了。如果你不会C/C++那么就不要理会“委托是指针”这句话。比如形象的说,委托相当于一个方法容器,里面装载着具有相同函数签名的不同函数引用地址,通过这个容器就可以方便的同时调用该容器内的所有函数。 using System;namespace ConsoleProjectBlogs{ public delegate void WriteHandler( string inputString ); class O1 { [STAThread] static void Main(string[] args) { WriteHandler write = new WriteHandler( WriteToClient ); string input = "測試"; write( input ); } public static void WriteToClient( string input) { Console.WriteLine( input ); } }} 上面是一個簡單得委托示例,然後你使用 ILdasm 查看IL代碼:.class public auto ansi sealed WriteHandler extends [mscorlib]System.MulticastDelegate{} // end of class WriteHandler 上面是WriteHandler委托的IL代碼,從這裡可以看出,.net framework 是以類得方式來實現委托的。 MSDN語錄: 委托是一个可以对方法进行引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。 Silverlight怎样连接到指定“aspx页面” 如何快速关闭TcpClient? 求C#中通过API获取CPU序列号的代码?非WMI获取 关于键盘事件 C#调用VC6编写的dll 如何使用C#语言实现两语句在执行过程有一个时间差度? 求封锁特殊功能键的完整源代码,分不够,再加 新手问题,高人请进 哪个视图中存在着关于存储过程参数的信息(oracle) 怎样让DropDownList能从它下拉值中选择值又能让用户自己也可以输入值? 如果需要在线程结束了以后再执行代码,应该怎么做? 关于XML作为数据库,是用什么工具创建XML的结构的。
class 人类
{
//构造函数代码略
public void 好()
}
//分别new 一个人类的实例:我、他 (代码略 )public void delegate 好(); 好 他好=new 好(他.好)
好 我好=new 好(我.好)
好 大家好=他好+我好嘿嘿,汇仁肾保:)委托用于相加的地方,加法重载
委托和类是一个级别的概念,可以new
委托相当于C++中的指向函数的指针,这是便于那些曾经学过C/C++的人容易理解委托的作用。
但在C#中委托是一种对象,而且是一种可以序列化的实实在在的C#基础对象,具体的东西上面已经有人详细的解释过了。
如果你不会C/C++那么就不要理会“委托是指针”这句话。
比如形象的说,委托相当于一个方法容器,里面装载着具有相同函数签名的不同函数引用地址,通过这个容器就可以方便的同时调用该容器内的所有函数。
{
public delegate void WriteHandler( string inputString ); class O1
{
[STAThread]
static void Main(string[] args)
{
WriteHandler write = new WriteHandler( WriteToClient );
string input = "測試";
write( input );
} public static void WriteToClient( string input)
{
Console.WriteLine( input );
}
}
} 上面是一個簡單得委托示例,然後你使用 ILdasm 查看IL代碼:
.class public auto ansi sealed WriteHandler
extends [mscorlib]System.MulticastDelegate
{
} // end of class WriteHandler 上面是WriteHandler委托的IL代碼,從這裡可以看出,.net framework 是以類得方式來實現委托的。
委托是一个可以对方法进行引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。