委托、事件和lambda表达式

  • 委托:是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法)。

委托类型包含3个重要的信息:(方法签名

1.它所调用的方法的名称;

2.该方法的参数(可选);

3.该方法的返回值类型(可选)

.NET委托既可以指向静态方法,也可以指向实例方法。

委托机制所利用的命名空间:System.MulticastDelegate与System.Delegate基类。

using System;

namespace SimpleDelegate
{
    //这个委托可以指向任何传入两个参数并返回一个整数的方法
    public delegate int BinaryOp(int x, int y); //定义委托类型
    public class SimpleMath
    {
        public static int Add(int x, int y){
            return x + y;
        }

        public static int Subtract(int x, int y){
            return x - y;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            //创建委托对象
            BinaryOp b = new BinaryOp(SimpleMath.Add);
            //使用委托对象间接调用Add()方法
            Console.WriteLine("使用委托对象--{0}",b(10, 10));
            Console.ReadKey();
        }
    }
}

※如果要将目标对象方法插入指定委托对象,只要向委托的构造函数传入方法名称即可。

  • 泛型委托
using System;

namespace GenericDelegate
{
    //这个泛型委托可以调用任何返回void并接受单个参数的方法
    public delegate void MyGenericDelegate<T>(T arg);
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("*** 泛型委托 ***\n");
            //注册目标
            MyGenericDelegate<string> strTarget = new MyGenericDelegate<string>(StringTarget);
            strTarget("Some string data");

            MyGenericDelegate<int> intTarget = new MyGenericDelegate<int>(IntTarget);
            intTarget(9);
        }

        static void StringTarget(string arg){
            Console.WriteLine("arg in uppercase is: {0}", arg.ToUpper());
        }

        static void IntTarget(int arg){
            Console.WriteLine("++arg is: {0}", ++arg);
        }
    }
}

  • 事件

事件:类似于异常,它们都是由对象引发(抛出,达到某种条件触发),并且可以通过我们提供的代码来处理,并且必须订阅它们;订阅一个事件的含义是提供代码,在事件发生时执行这些代码,它们称为事件处理程序。

定义一个事件分为两个步骤:1. 需要定义一个委托类型,它包含在事件触发时将要调用的方法;

                                            2. 通过event关键字用相关委托声明这个事件。

  • 匿名方法
  • Lambda表达式

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值