開啟主選單
求真百科
搜尋
檢視 委托 的原始碼
←
委托
由於下列原因,您沒有權限進行 編輯此頁面 的動作:
您請求的操作只有這個群組的使用者能使用:
用戶
您可以檢視並複製此頁面的原始碼。
{| class="wikitable" align="right" |- | style="background: #FF2400" align= center| '''<big>委托</big>''' |- |<center><img src=https://d02.findlawimg.com/my/topic/20180720/2018072011514311_400wh300.jpg width="300"></center> <small>[https://china.findlaw.cn/ask/baike/zt_7122.html 来自 找法网 的图片]</small> |} '''<big>委托</big>''' 是一个类,它定义了方法的[[类型]],使得可以将方法当作另一个方法的参数来进行[[传递]],这种将方法动态地[[赋给]] [[参]]数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可[[扩展性]]。 ==基本信息== 中文名称 委托 <ref>[https://www.so.com/link?m=bq%2FC%2FZrvMbLTyrEm4%2F6O4Lrs93nN8T2lFKzuf6%2FSLJHHkoVKaE9J6gao1%2FLC3OM6HfENzhLhWByXwtBtFdCC049wffBBTTVEQS9LYM141k5sknqbHlCatgA7ShGi4zGbSnr44AaOhhROml%2FozMfw1tDLtPU9b36QJ 什么是撤销委托]</ref> 外文名称 delegate 定义 方法的类型 解释 用来执行方法(函数)的一个东西 作用 程序具有更好的可扩展性 ==引言== 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。 ==委托初识== 我们知道委托是一个引用类型,所以它具有引用类型所具有的通性。它保存的不是实际值,而是保存对存储在托管堆(managed heap)中的对象的引用。那它保存的是对什么的引用呢?委托保存的是对函数(function)的引用。 对学过C/C++的人,是不是觉得跟函数指针很像呢!委托可以引用实例和静态(在 Visual Basic 中为 Shared)方法,而函数指针只能引用静态方法。 其实它们是有区别的,在非托管C/C++中,函数的地址就是一个内存地址。该地址不会携带任何额外的信息,例如函数期望的参数个数、参数类型、函数的返回值类型及函数的调用约定。总之,非托管C/C++中函数指针是非类型安全的。而.NET中的委托是类型安全的,委托会检测它所保存的函数引用是否和声明的委托匹配。 ==委托本质== 在C#中使用delegate关键字定义委托,然后使用我们熟悉的函数调用的语法来调用委托,如上述例子中的cb("skynet",23)。在这简单的表象背后,.NET编译器为我们做了什么呢? 可以知道定义CallBack委托时,编译器为我们做了如下工作,实际上定义任何委托编译器都会做如下工作: 声明一个类,对应例子中的.class nested public auto ansi sealed。 该类扩展自System.MulticastDelegate,对应例子中的extends [mscorlib]System.MulticastDelegate。 该类包含一个构造器,对应例子中的.ctor: void(object ,native int)。 该类包含三个方法,分别是BeginInvoke、EndInvoke、Invoke。 ==委托类== 当我们用delegate关键字声明委托时,编译器自动为我们生成类。类的名字即为委托变量名,访问类型为定义的委托访问类型。如上例中,public delegate void CallBack(string name, int number);定义的委托对应的类为CallBack,访问类型为public,该类继承自[mscorlib]System.MulticastDelegate。如果我们定义委托的访问类型为private或者protected,则对应的委托类的访问类型为private或者protected。但是任何委托都继承自[mscorlib]System.MulticastDelegate。 什么是委托 首先要知道什么是委托,用最[[通俗易懂]]的话来讲,你就可以把委托看成是用来执行方法(函数)的一个东西。 如何使用委托 在使用委托的时候,你可以像对待一个类一样对待它。即先声明,再实例化。只是有点不同,类在实例化之后叫对象或实例,但委托在实例化后仍叫委托。 ==參考來源== {{Reflist}} [[Category:揭密生活]]
此頁面使用了以下模板:
Template:Main other
(
檢視原始碼
)
Template:Reflist
(
檢視原始碼
)
模块:Check for unknown parameters
(
檢視原始碼
)
返回「
委托
」頁面