c# 中委托和直接函数调用用什么区别,好处和目的在哪?

以一个例子说明:
//定义原形
public delegate void MessageEventHandler(object sender, EventArgs e);
public event MessageEventHandler MessageReceived;

//注册事件
MessageReceived += new MessageEventHandler(HandleIt);

//使用时
MessageReceived(this,aaa) //aaa是一个EventArgs对象


//定义的处理方法
private void HandleIt(object sender, EventArgs e)
{
.....
}

我想问,这样绕了一圈,本质上不还是在使用时调用一下HandleIt方法么?那么委派的优点究竟在哪里呢?到底有什么好处呢?和直接用函数调用区别在哪里呢?
请高人解答。
请给我个直接明了的回答,如果能再结合个例子说明也好,谢谢。

最佳答案
委托是CTS(公共类型系统)规定的5种类型之一(类类型、结构类型、接口类型、枚举类型、委托类型)。
通俗的说,委托是这样一种类型:这种类型的实例,指向其它类型的方法。
委托主要就是提供间接调用、构建双向系统用的,他为消息模型和多线编程提供了基础。

再说说事件,事件并不是一种类型,它是一个方法,它是为了简化委托的注册而出现的。并不是1楼所说的那样:事件是一种委托,这是严重的误导!
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 函数可以通过直接调用和间接调用来执行。直接调用是指在一个函数内部直接调用另一个函数,而间接调用是指使用委托或反射机制来调用函数。 直接调用函数是最常见的方法,可以通过函数名和参数列表来直接调用函数。例如: ```csharp public void MyFunction() { // 直接调用 AnotherFunction AnotherFunction(); } public void AnotherFunction() { // 实现代码 } ``` 相反,间接调用函数需要使用委托或反射机制。委托是一个可以存储对函数的引用的对象,可以将其传递给另一个函数,并在该函数调用该函数。例如: ```csharp public delegate void MyDelegate(); public void MyFunction() { // 创建委托实例并传递 AnotherFunction MyDelegate del = new MyDelegate(AnotherFunction); // 通过委托调用 AnotherFunction del(); } public void AnotherFunction() { // 实现代码 } ``` 反射机制允许在运行时动态地调用函数,而不需要在编译时知道函数的名称。可以使用反射机制来获取函数的 MethodInfo 对象,并使用它来调用函数。例如: ```csharp public void MyFunction() { // 获取 AnotherFunction 的 MethodInfo 对象 MethodInfo mi = typeof(MyClass).GetMethod("AnotherFunction"); // 创建实例 object obj = Activator.CreateInstance(typeof(MyClass)); // 调用函数 mi.Invoke(obj, null); } public class MyClass { public void AnotherFunction() { // 实现代码 } } ``` 无论是直接调用还是间接调用,都可以用于执行函数并返回结果。直接调用更简单、更直接,但是间接调用更灵活,可以在运行时动态地调用函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值