• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

浅谈委托和事件之初识C#委托

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

园子里有很多讲委托的文章,都很好。我写这篇文章的目的。一、是为了巩固基础知识。二、让更多的人理解委托、使用委托。说的都比较肤浅,希望大家多批评。

委托的定义有很多,我始终感觉概念这东西是“仁者见仁智者见智”的东西,大家看哪个好理解就理解哪个好了。常见的委托的定义有如下几种

1、MSDN:委托是一种定义方法签名的类型。 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。 您可以通过委托实例调用方法。

2、委托是一种可以把引用存储为函数的类型。

3、委托是一种类型安全的函数回调机制。

大家不要被概念震住。对于概念的理解都是建立在对其内容充分理解基础上的。看问题的角度不同,总结出来的概念自然也不尽相同,不过殊涂同归,都是在说委托这个语法。下面我们通过Demo来慢慢理解这个C#中令人惊叹的委托机制。

看如下代码:

class Program
   2:    {
int y);
   4:  
   5:  
string[] args)
   7:        {
new CalculateDelegate(Program.Add);
int resultAdd = add(2, 2);
  10:  
new CalculateDelegate(Program.Minus);
int resultMinus = minus(2, 2);
  13:  
new CalculateDelegate(Program.Mult);
int resultMult = mult(2, 2);
  16:  
new CalculateDelegate(Program.Devide);
int resultDevide = devide(2, 2);
  19:  
  20:            Console.WriteLine(resultAdd);
  21:            Console.WriteLine(resultMinus);
  22:            Console.WriteLine(resultMult);
  23:            Console.WriteLine(resultDevide);
  24:            Console.ReadKey();
  25:        }
  26:  
int y)
  28:        {
return x + y;
  30:        }
int y)
  32:        {
return x - y;
  34:        }
int y)
  36:        {
return x * y;
  38:        }
int y)
  40:        {
return y == 0 ? 0 : x / y;
  42:        }
  43:    }

二、代码解释:                                                             

程序很简单,首先定义一个用于计算的委托签名,然后在实现四个加、减、乘、除四个方法,最后在Main函数中分别创建委托实例传入方法名,并调用。现在大家是否对如何使用委托有了直观的了解。我总结一下:

1、创建委托签名,该签名除了多一个delegate关键字以外,其它部分和没有函数体的函数完全一样。

2、创建你要引用方法。例子中的Add、Minus、Mult、Devide等方法,方法签名要和委托一样。

3、实例化委托传入要执行的函数后,用委托的实例调用方法。比如

 CalculateDelegate add = new CalculateDelegate(Program.Add);  int resultAdd = add(2, 2);
 
其中Program.Add是实例化委托传入的函数,然后用委托的实例add调用方法Add。有点绕,大家们可以把add理解成一个指针,add(2,2)指向的就是Program.Add(2,2)方法。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#手动读写appconfig的源码发布时间:2022-07-14
下一篇:
推荐一个开源C#股票软件发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap