zoukankan      html  css  js  c++  java
  • C#的委托是什么?

    举个例子,某人有三子,让他们各自带一样东西出门,并带回一头猎物。可以理解为一种父亲对儿子的委托。

    在学C时,一定会接触到各种各样的指针。正是指针的随意使用,导致了现在溢出攻击的泛滥。

    那么在C#里面,针对这种现象进行了改进--委托。委托的作用类似于方法指针,它指向一个方法,并且提供用户程序使用。但是,这个方法指针是有限制的,必须规定好所指向方法的返回值,参数个数及各个参数的类型。因此,可以防范溢出攻击。

    简而言之:所谓委托,是可以调用目标方法并且确定方法签名的一种特殊的对象。

    具体到C#语法,委托分为委托声明和委托实例两种。

    委托声明,用来声明委托所指向的方法的签名。它以delegate关键字开头,一般写在类的前面。例如,当我想要指向的方法为:

    public string MergeString(string s1, string s2)

    我们就可以声明一个有两个string参数并且返回一个string的委托:

    delegate string TestDelegate(string s1, string s2);

    委托声明并没有指向任何方法,因此,它不可以直接被调用。但是,我们可以通过委托(声明)来实例化对象,这样的对象就被称为委托实例。

    委托实例的创建与用类实例化一个对象类似,但有一个约定,要把目标方法的方法名作为参数传入,例如:

    public void Print(string s1, string s2) 
    
    { 
    
     TestDelegate testDelegate = new TestDelegate(MergeString); 
    
     string newString=testDelegate(s1, s2) 
    
     Console.WriteLine(newString);  
    
    }
    
    

    方法Print中:

    第一行,我们利用一个委托声明得到了一个委托实例。

    第二行,调用这个委托。

    第三行,输出结果。

    小结一下,委托的实质是安全的方法指针;委托分为委托声明和委托实例;使用委托时,先声明,然后实例化,最后调用。

    一个很有趣的问题出现了:我们为什么要用委托?

    委托给我们带来的最大好处时:其可以通过编程方法来动态的调用别的方法。这意味着什么?这意味着,当我们把委托作为参数时,写一个代码模板,就可以让其以一定的方式执行不同的代码。

  • 相关阅读:
    Python 里的下划线
    浅谈TCP拆包粘包问题
    40 张图带你搞懂 TCP 和 UDP
    头条面试官问:如何保证网络传输的可靠性?这就很尴尬了
    TCP协议灵魂12问,面试总会用得到(建议收藏)
    TCP网络握手
    HTTP1.0、HTTP1.1和HTTP2.0的区别
    面试官:这波HTTP究极combo,你顶得住吗?_chuhe1989的博客-CSDN博客
    腾讯面试官:说一下Android网络知识和框架?
    网络通信必备基础之Http协议&TCP/IP协议(二)
  • 原文地址:https://www.cnblogs.com/study-development/p/3736014.html
Copyright © 2011-2022 走看看