C# — 事件委托

委托简单实例

 static void Main(string[] args)
    {
          Example example = new Example();
        //example.Go();
        Console.WriteLine(example.Go());
        Console.ReadKey();
    }
public class Example
    {
        public delegate string DoSth(string str);
        internal string  Go()
        {
            //声明一个委托变量,并把已知方法作为其构造函数的参数
            DoSth d = new DoSth(Print);
            string str = "Hello,World";
            //通过委托的静态方法Invoke触发委托
            return  d.Invoke(str);
        }
        string  Print(string str)
        {
            return "委托返回值";
        }
    }

委托是什么?

其实,我一直思考如何讲解委托,才能把委托说得更透彻。说实话,每个人都委托都有不同的见解,因为看问题的角度不同。个人认为,可以从以下2点来理解:

(1) 从数据结构来讲,委托是和类一样是一种用户自定义类型。

(2) 从设计模式来讲,委托(类)提供了方法(对象)的抽象。

既然委托是一种类型,那么它存储的是什么数据?

我们知道,委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行。

2. 委托类型的定义

delegate void MyDel(int x);

委托类型声明:
(1) 以deleagate关键字开头。
(2)返回类型+委托类型名+参数列表。

声明委托变量

del1 = new MyDel( myInstObj.MyM1 );
del2 = new MyDel( SClass.OtherM2 );
----------------------------------------------------------
MyDel del1,del2;
del1 = myInstObj.MyM1;
del2 = SClass.OtherM2;
  1. 初始化委托变量
    (1) 使用new运算符

new运算符的操作数的组成如下:

委托类型名
一组圆括号,其中包含作为调用列表中的第一个成员的方法的名字。方法可以是实例方法或静态方法。

委托的添加方法与注销方法
MyDel del = myObj.MyMethod;
del += SClass.OtherM2; // 增加方法
del -= myObj.MyMethod; // 移除方法

Lambda表达式

删除delegate关键字
在参数列表和匿名方法主体之间防Lambda运算符=>。Lambda运算符读作"goes to"。

MyDel del = delegate( int x) { return x; };//匿名方法
MyDel del2 = (int x) => {return x;};//Lambda表达式
MyDel del3 = x => {return x};//简写的Lambda表达式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值