首页 > 保险 > 防骗经验 > 为什么要代码委托,C里委托是用来做什么的在什么地方使用为什么要用委托

为什么要代码委托,C里委托是用来做什么的在什么地方使用为什么要用委托

来源:整理 时间:2023-09-22 05:31:33 编辑:理财网 手机版

本文目录一览

1,C里委托是用来做什么的在什么地方使用为什么要用委托

巧了,最近我才研究了一下。你学过C了吧,说白了,委托就是换了个名词,跟什么一样呢,就跟C里的函数指针类似,什么是函数指针,就是一个指向函数的指针,通过把函数名赋给指针,我们可以在需要的位置通过这个指针来调用函数。C#里的委托就跟它类似,用法这样的:1.声明一个委托(函数指针)2. 创造符合委托格式的函数。(指针指向的函数)3. 创建委托对象4. 将函数名称赋值给委托。这样即可在需要的地方使用委托来调用函数。使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。委托的一个有趣且有用的属性是,它不知道或不关心自己引用的对象的类。任何对象都可以;只是方法的参数类型和返回类型必须与委托的参数类型和返回类型相匹配。

C里委托是用来做什么的在什么地方使用为什么要用委托

2,C委托是什么有什么用

非托管的 C++ 不支持委托,可以通过类来模拟委托;托管语言则原生态支持委托,比如 C++.net 以及 C#;委托是一种设计模式,一言两语很难说清楚;
委托就是把具体事情让别人做,我只调用你的函数。下面是一个例子:class realsortpublic: void sort();};class mysortprivate: realsort rs;public: getname(realsort rs) this.rs = rs; } void sort() rs.sort(); }};这里mysort将具体事情sort委托给realsort做。委托的作用在于保持抽象层的稳定,让抽象层不随之细节的变化而变化,也就是你下层的代码如何变化,上层的代码可以维持稳定。就以这个例子来说,开始要求用选择排序,后来老板的要求变了,要用快速排序,那么我只需修改realsort这个文件,而mysort这个文件不需要重新编译。具体资料可参考设计模式相关书籍。

C委托是什么有什么用

3,关于C委托

只能说指针与委托有一点类似,但委托更加符合人们的需求,比如解决同一个问题,c#可以通过多播委托订阅多个以上的事件或方法,但c\c++里的普通的指针一旦指定了一个函数入口地址或具体一个变量或数组的地址,该指针只能指向它(除了用指针数组)。总体而言,指针没有委托那么灵活,也没有委托那么安全。
委托就是把具体事情让别人做,我只调用你的函数。下面是一个例子:class RealSortpublic: void sort();};class MySortprivate: RealSort rs;public: GetName(RealSort rs) this.rs = rs; } void sort() rs.sort(); }};这里MySort将具体事情sort委托给RealSort做。委托的作用在于保持抽象层的稳定,让抽象层不随之细节的变化而变化,也就是你下层的代码如何变化,上层的代码可以维持稳定。就以这个例子来说,开始要求用选择排序,后来老板的要求变了,要用快速排序,那么我只需修改RealSort这个文件,而MySort这个文件不需要重新编译。具体资料可参考设计模式相关书籍。

关于C委托

4,C中的委托是怎么回事

委托属于C#中的新名词,它的应用也非常广泛,例如事件就是委托最简单而又直接的例子。  那么首先说说什么是委托,其实委托在用过C或者C++的人看来就是函数指针,不过使用C#的大多数人都没有用过这两门语言,因此对委托的理解不是很深,对于委托可以简单的从字面去理解,即“委托别人去执行某些操作”,也就是说执行一个操作,而这个操作过程自身并不知道,只是委托过来让你去执行而已。  参看如下这个例子。  public delegate void HelloHandler( string Msg );  private void SayHello( string sMsg )    MessageBox.Show( sMsg );  }  // delegate sample  HelloHandler hHello = new HelloHandler( SayHello );  hHello( "Hello World!" );  例子很明显,在执行hHello的时候,并不知道具体的过程是什么样的,只是去执行而已。  现在要说说委托能做些什么,那么先来分析一下事件,这也是委托用得最多的地方。一般事件的初始化需要绑定一个事件处理函数,那么当事件触发的时候,处理函数会被调用,也就是说在事件处理函数可以明确的知道,此事件是被触发了。例如,点击窗体的上的Button,它会把Click事件反馈给窗体。很明显,委托是处理对象之间的信息交互。除了事件外,委托的大多用处都和此类似,那么这样使用的好处在于降低对象之间耦合性。  其次委托不同于以前函数指针的地方在于,可以绑定多个委托函数,例如:  public delegate void HelloHandler( string Msg );  private void WriteHello1( string sMsg )    Debug.WriteLine( "WriteHello1:" + sMsg );  }  private void WriteHello2( string sMsg )    Debug.WriteLine( "WriteHello2:" + sMsg );  }  // delegate sample  HelloHandler hHello = new HelloHandler( WriteHello1 );  hHello += new HelloHandler( WriteHello2 );  hHello( "Hello World!" );  不过在这种情况下,由于绑定到委托上的函数是按照顺序执行的,所以有两个潜在的问题。  第一个问题,当一个函数执行过程中产生异常,导致后面的不能进行执行。就上面的例子而言,如果在“WriteHello1”函数中出现异常,会导致“WriteHello2”不能被执行。  另一个问题,就是委托执行的返回值,当绑定多个函数,委托执行的返回值是最后一个绑定函数执行后的返回值,那么通过这个值去做判断将会是不正确的。  那么对于委托绑定多个函数,要注意的是不要把异常扩散出来,其次委托类型的返回值为“void”。  如何去使用委托,很多人看了书上的例子,也知道委托的意义,但是无法把它和实际应用进行结合。那么在使用委托的时候,首先要明白几个问题,等各个问题清楚了,委托原型也就自然出来了。  需要分析清楚的问题有如下几点。  问题一,传递信息是什么,传递的时机是否固定,一次传递还是多次传递;  问题二,用委托是否合适;  问题三,哪一方是委托的调用端,而哪一方是委托的初始端;  问题四,委托的初始化放在哪里比较合适。  问题一是关键,这首先决定是否要使用委托来实现,其次如果要使用委托,那么需要确定委托函数类型。  对于问题二来说,很多人可能就不解了。没错,委托是可以降低类型之间的耦合性,但是能起到这种作用的并不是只有委托这一种方法。很多情况下,用重载构造函数即可以达到这一目的,因此想问题的时候,不能局限于此。例如,很多人都做过弹出一个单独窗体对某一条记录进行修改,这里用委托可以实现,但是考虑到DataRow属于引用类型,而这个窗体脱离了数据记录就失去了意义,因此可以重载构造函数,在初始化窗体的时候,把记录传递给窗体就行了。相对而言,后者会更简单直接些。  有了前两个问题的分析,不少人在写委托的时候,会把顺序写反了,因此程序执行的效果并不是设想中的那样,这一点要尤为注意。  对于第四个问题来说,可以借鉴窗体的控件事件初始化部分代码,即委托的初始化采取就近原则,不过这不是唯一初始化的地方,这样写只是便于防止漏写。

5,谁能告诉我C中定义一个事件为什么需要一个委托啊

事件其实就是一个特殊的委托,对事件的声名其实就是声明一个私有的委托变量你先把什么是委托搞清楚,就知道委托和事件的关系了举个例子 public void EnglishGreeting(string name) Console.WriteLine("Morning, "+ name); }public void ChineseGreeting(string name) Console.WriteLine("早上好, " + name); }public enum Language English, Chinese } public void GreetPeople(string name, Language lang) //做某些额外的事情,比如初始化之类,此处略 switch (lang) case Language.English: EnglishGreeting(name); break; case Language.Chinese: ChineseGreeting(name); break; } 这个语句当我们传入姓名name的参数,比如说"jack" 进去的时候将调用EnglishGreeting方法,相反传name为“杰克"将调用ChineseGreeting方法很显然这个语句的扩展性很差 ,如果再添加其他语言版的,那就得反复的去修改GreetPeople()方法,这个非常不方便 委托就可以解决上面的问题 public delegate void GreetingDelegate(string name); 在这里定义了委托,它代表方法的类型,这里代表EnglishGreeting和ChineseGreeting方法static void Main(string[] args) GreetingDelegate delegate1; delegate1 = EnglishGreeting; // 先给委托类型的变量赋值 delegate1 += ChineseGreeting; // 给此委托变量再绑定一个方法 // 将先后调用 EnglishGreeting 与 ChineseGreeting 方法 GreetPeople("Jimmy Zhang", delegate1); Console.ReadKey(); }也就是说此时委托代表EnglishGreeting 和ChineseGreeting 方法类,想当于他们的摸板(不知道楼主懂这句话不?)然后将这2个方法绑到此委托变量中,调用此变量的时候将依次执行上面的2个方法这里输出结果为Morning, Jimmy Zhang 早上好, Jimmy Zhang 早上好, 张子阳 到这里楼主明白了,委托的好处了吗??事件顾名思义,就是发生的事情,一个事件中包含一些方法。那些方法都串联起来发生的的,即然如此肯定就和委托有关系,委托也是包含了一些方法,先面看看看事件的声明方式 public event GreetingDelegate MakeGreet;是吧?声明一个事件不过类似于声明一个委托类型的变量而已。 MakeGreet = EnglishGreeting; MakeGreet += ChineseGreeting;一样也是绑定方法,和委托一样现在你应该明白为什么一个事件需要一个委托了把事件其实就是委托,不知道说了这多你明白了没汗。。了 PS:事件和委托的关系是有点纠结,对于新手来说,过了这个坎儿,你就会觉得这个很简单,今天下午没事,花点时间举个例子来解答一下,不知道你明白了没
声明委托。public delegate void myevent(object sender, eventargs e); //可放在任意地方,可能还要定义事件参数用来传递上下文需要的内容在你的对象中定义事件,用于客户程序绑定事件处理程序。public event myevent myeventhandler add; remove;}还要在你的对象中触发事件。private void fireevent() if (myeventhandler != null) myeventhandler(this, new eventargs()); }}
事件是建立在委托的模型之上,事件是委托的一个应用,归根结底强大的还是委托:委托可认为是一类方法的抽象,这类方法具有相同的签名:参数和返回值类型相同;委托有4个应用:1更加灵活的方法调用2用于异步回调3多线程编程时,用委托来制定一个线程启动时调用的函数4C#中事件模型,用它们指明处理特定事件时的方法而事件可对照着oo理解为实体(类)或者行为(接口)等之间或内部发生的一些变化,比如按钮类的一个实体:一个按钮的双击事件,当发生这个事件的时候会发生一些情况,并对应这个情况产生一些解决方法,,前者就是双击事件(微软已写好的),,而后者就是你在双击事件的大括号里写的代码,后者的代码也就是在定义委托事件时调用方加载的代码,,,这时用委托把你写的方法封装为一个整体,,把这个整体给这个事件告诉这个事件你发生了,那么我作为代理我要帮这些方法执行他们。我也是百度出来的
其实简单,说白了就是,自己没法完成,只好委托别人完成,然后把完成后的结果告诉自己(这个过程叫回调)。道理就是这样。举个例子,比如说,在一个程序的线程中,调用另一线程,那么,是不能直接调用的,这时候,就用到委托,于是第三方出现,第三方的作用就是用来执行不属于自己的内容。就是这样理解就成了。
文章TAG:为什么什么代码委托为什么要代码委托

最近更新

相关文章