
使用委托,在form1中声明委托,并定义委托函数,函数的其中一个参数是datagridview中的数据。在form2中注册这个委托,并把更新的数据通过委托函数传到form1中,这样就可以实时刷新了。
函数指针本身是个地址,他的地址就是某个函数的入口地址。。。委托则不是地址,因为C#托管代码没有指针,所以函数指针也是不存在的。。。。
虽然委托和函数指针功能相同,但本质是不同的,函数指针和所有指针一样是个地址,而委托只是C#定义的一种类型,首先不能像指针一样,进行加减运算,但另一个不同之处是,委托无论是否是静态成员只要参数表返回值相同都是同一类型,静态和非静态方法用法无区分。。。。
而C++上的指针静态和非静态则完全不同的两种类型,而且不同类的非静态方法即使参数相同返回值相同也不是同一种类型,这个最蛋疼,这点C++有点奇葩。。。以至于我经常要把函数变成静态函数,声明成类的友元函数,来进行函数指针传递。。。
使用委托的作用:使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
委托和事件在NET Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。
扩展资料:
委托的本质:
在C#中使用delegate关键字定义委托,然后使用我们熟悉的函数调用的语法来调用委托,如上述例子中的cb(“skynet”,23)。在这简单的表象背后,NET编译器可以知道定义CallBack委托时,编译器为我们做了如下工作,实际上定义任何委托编译器都会做如下工作:
声明一个类,对应上图中的class nested public auto ansi sealed。该类扩展自SystemMulticastDelegate,对应上图中的extends [mscorlib]SystemMulticastDelegate。
该类包含一个构造器,对应上图中的ctor: void(object ,native int)。该类包含三个方法,分别是BeginInvoke、EndInvoke、Invoke。
-委托 (C#类)
-c#委托
委托是对方法的包装
在不确定要调用什么方法时候而又不能用抽象或者多态实现的时候用委托。
比如一个button,当点击肯定要触发事件,做一些处理,如果你是这个控件的开发者,你怎么知道当点击是要处理什么?你这个button会被什么容器所包含?所以你必须公布一个event出去,用控件的人具体去实现其功能。
C# 声明个委托,再调用Invoke就行了
可以将委托指向一个写好的方法,也可以用lambda表达式动态声明委托。
Func<int> method=()=>ConvertToInt32("5");
int result=methodInvoke();
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)