委托程序有哪些你知道吗?

委托程序有哪些你知道吗?,第1张

delegate 声明定义一种引用类型,该类型可用于将方法用特定的签名封装。委托实例封装静态方法或实例方法。委托大致类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。

委托使您得以将函数作为参数传递。委托的类型安全要求作为委托传递的函数拥有同委托声明相同的签名,用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给某个方法,而不必在编译时知道将调用哪个方法。与 C 或 C++ 中的函数指针不同,委托是面向对象、类型安全的,托声明定义一种类型,它用一组特定的参数以及返回类型封装方法。对于静态方法,委托对象封装要调用的方法。对于实例方法,委托对象同时封装一个实例和该实例上的一个方法。如果您有一个委托对象和一组适当的参数,则可以用这些参数调用该委托。

委托概述委托是C#中新加入的一个类型,可以把它想作一个和Class类似的一种类型,和使用类相似,使用一个委托时,需要两个步骤,首先你要定义一个委托,就像是定义一个类一样;然后,你可以创建一个或多个该委托的实例。定义一个委托的语法是这样的: [public/protected/private] delegate returnType delegateName(paramtype param1,…) 这是我自己写的,看起来好像有点怪怪的,我来解释一下,private/protected/private是限定词,就不多说了,delegate是申明一个委托的关键词,returnType是一个返回类型,delegateName是一个你给委托起的名字,你可以写任何一个你喜欢的名字,paramtype param1…这个是参数列表。说了这么多可能看起来还是不是很好理解,我是这样认为的,实用点来讲,委托定义就是在一个函数定义中间加入一个delegate的关键词。它的作用类似于你申明一个类: public class ClassName {…} 创建一个委托的实例: [public/protected/private] delegateName deleInstanceName = new delegateName(MethodName) 这个类似于实例化一个类,public ClassName instancename = new ClassName(…),这里有个要注意的地方,即MethodName方法要和delegateName的签名一致。什么是签名一致,就是说MethodName的参数列表,返回值要分别和returnType、(paramtype param1,…)一致。举个例子来说明下: public delegate string DelegateDemo(string name, int age)比如我们如上定义了一个委托,就写法来说,其实就是在函数 string DelegateDemo(string name, int age)前面加了一个delegate的关键字,下面我们来用创建一个函数: public string AgentDemo(string name, int age) { string rev = “”… return rev} 这个函数是做参数传递给一个DelegateDemo实例的,接下来创建一个DelegateDemo的实例: DelegateName instanceDemo = new DelegateName(AgentDemo)这时要说到一致了,即AgentDemo和声明委托时的DelegateDemo(我们姑且将delegate去掉)这两个函数的返回值,参数列表要相同。终于说完了,不知道看的人明不明白。接下来,我们可以使用这个委托了(调用一个委托),如下: string name = “cshape”int age = 20instanceDemo(name, age)当instanceDemo执行时,会执行AgentDemo函数,instanceDemo相当于C里的一个函数指针,现在这个指针指向AgentDemo的函数入口地址。 2.多点委托前面提到的委托都只包含对一个方法的调用,如果需要调用多个方法,需要多次显示的调用这个委托,我们还有另的选择,我们可以让一个委托中包含多个方法,这样我们一次显示调用委托,就可以按照顺序连续的调用多个方法。看下面的例子: public delegate void MultiDelegate(string name)public void AgentDemo1(string str) { Console.WriteLine(str + “this is AgentDemo1\n”)} public void AgentDemo2(string s) { Console.WriteLine(s + “this is AgentDemo2\n”)} MultiDelegate multiDemo = new MultiDelegate(AgentDemo1)multiDemo += new MultiDelegate(AgentDemo2)multiDemo(“multiDemo test :”)输出的结果应该是: multiDemo test :this is AgentDemo1 mutliDemo test :this is AgentDemo2


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11779427.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存