.C#中的委托是什么?事件是不是一种委托?

 我来答
落霞云如归
推荐于2019-08-23 · TA获得超过2723个赞
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部

一、委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针。事件也是一种委托。

二、案例://声明一个委托,这里的NewDelegate()可以理解为是之后用来取方法的一个类型。
delegate void NewDelegate();
//下面定义的a,b两种方法,你可以理解为NewDelegate这个类型的两个实例。
public void a(){};
public void b(){};
public void main()
{
NewDelegate dgt1=new NewDelegate(a);
NewDelegate dgt2=new NewDelegate(b);
//dgt1指向方法a,dgt2指向方法b。也就是说一个方法的返回值和参数类型数量与声明的委托
//相符时,就可以用一个委托来调用这个方法。而这个方法的名称作为参数传递给实例化的那个委托。

拓展资料:

C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders

Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司
.NET windows网络框架的主角。

Net Framework的编码规范:

委托类型的名称都应该以EventHandler结束。
委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs)。
事件的命名为 委托去掉 EventHandler之后剩余的部分。 继承自EventArgs的类型应该以EventArgs结尾。

参考资料:百度百科-C#

柔情西瓜啊
推荐于2019-10-19 · TA获得超过33.8万个赞
知道小有建树答主
回答量:67
采纳率:100%
帮助的人:3.7万
展开全部

分析如下:

1、委托是CTS(公共类型系统)规定的5种类型之一(类类型、结构类型、接口类型、枚举类型、委托类型)。

2、通俗的说,委托是这样一种类型:这种类型的实例,指向其它类型的方法。

委托主要就是提供间接调用、构建双向系统用的,他为消息模型和多线编程提供了基础。

3、再说说事件,事件并不是一种类型,它是一个方法,它是为了简化委托的注册而出现的。事件是一种委托,这是严重的误导!

拓展资料

1、我们知道委托是一个引用类型,所以它具有引用类型所具有的通性。它保存的不是实际值,而是保存对存储在托管堆(managed heap)中的对象的引用。那它保存的是对什么的引用呢?委托保存的是对函数(function)的引用。

2、对学过C/C++的人,是不是觉得跟函数指针很像呢!委托可以引用实例和静态(在 Visual Basic 中为 Shared)方法,而函数指针只能引用静态方法。 其实它们是有区别的,在非托管C/C++中,函数的地址就是一个内存地址。该地址不会携带任何额外的信息,例如函数期望的参数个数、参数类型、函数的返回值类型及函数的调用约定。总之,非托管C/C++中函数指针是非类型安全的。而.NET中的委托是类型安全的,委托会检测它所保存的函数引用是否和声明的委托匹配。

(资料来源:百度百科:委托

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jack87918
推荐于2017-09-09 · TA获得超过2048个赞
知道小有建树答主
回答量:1618
采纳率:100%
帮助的人:1438万
展开全部
这个是n多面试笔试里面爱出的一道题,老生常谈。。。
我讨厌复制粘贴,直接告诉你我的理解,希望对你有帮助---
委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针。
给你举个例子:
//声明一个委托,这里的NewDelegate()可以理解为是之后用来取方法的一个类型。
delegate void NewDelegate();
//下面定义的a,b两种方法,你可以理解为NewDelegate这个类型的两个实例。
public void a(){};
public void b(){};
public void main()
{
NewDelegate dgt1=new NewDelegate(a);
NewDelegate dgt2=new NewDelegate(b);
//dgt1指向方法a,dgt2指向方法b。也就是说一个方法的返回值和参数类型数量与声明的委托
//相符时,就可以用一个委托来调用这个方法。而这个方法的名称作为参数传递给实例化的那个委托
}

事件是一种特殊的委托,为什么这么说呢?
用反编译工具反编译.net framework即可发现,事件的定义(这里只是举其中一种事件的定义,事件的参数在类库中定义有区别),如下:
public delegate void EventHandler(object sender, EventArgs e);
而常见的各种控件的Click事件是如何定义的呢?
public event EventHandler Click;
说明 Click事件是一个委托
而我们常见的一个Button控件添加一个事件是怎么做的呢?
PageLoad里:Button1.Click+=new EventHandler(Button1_Click);
定义Button1的事件 protected Button1_Click(object sender,EventArgs e){}
如你所见,这是一个很典型的委托调用。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cpys520
2011-09-30 · TA获得超过2万个赞
知道大有可为答主
回答量:4017
采纳率:0%
帮助的人:1701万
展开全部
委托是C#新增的概念,在C++中没有。不过委托的概念与C++的函数指针比较相近。如图函数指针,委托可以引用一个或多个方法(静态或非静态)。委托比函数指针更为强大,同一个委托可以引用不止一个方法,而且语法更加清晰和好用。

事件是一种特殊的委托。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
臻戈奇恶知0i
2011-10-13
知道答主
回答量:1
采纳率:0%
帮助的人:1686
展开全部
委托是引用类型的变量,他可以包含对方法的引用,当程序必须通过调用一个方法来执行某个操作,但在编译时不知道该方法是什么时,就可以使用委托。委托允许在程序运行时指定调用的方法,委托的特点是面向对象的,类型是安全的。委托和事件是C#的亮点优势。
事件是一种委托。
纯手打,望采纳。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式