C# 的高级特性1——委托

本文介绍了C#中的委托概念,包括委托的定义、如何使用委托、如何添加或移除方法、匿名方法和Lambda表达式的应用。通过示例展示了委托作为方法引用的机制,以及委托在代码中的实际运用。
摘要由CSDN通过智能技术生成

目录

1,什么是委托?

2,怎样使用委托?

3,为委托添加/减少方法

4,使用匿名方法实例化委托

5,使用Lambda表达式


1,什么是委托?

委托是一种持有一个或多个方法的,也是一种引用类型,它表示对具有特定参数列表返回类型的方法的引用

委托的实例实际上是调用者的代表,调用者先调用委托,委托再调用方法。这种间接的方式可以将调用这和委托分开。

如果学过C++,理解委托最快的方法就是把它看成一个加强版、更安全的函数指针

2,怎样使用委托?

下面是一个简单例子:

    delegate void MyDel(int value);  //声明委托类型,该委托带一个int类型参数

    class Program
    {
        public void PrintLow(int value)
        {
            Console.WriteLine($"{ value}-Low value");
        }

        public void PrintHigh(int value)
        {
            Console.WriteLine($"{ value}-High value");
        }
    }

    static void Main()
    {
        Program program = new Program();

        MyDel del;              //声名委托变量

        //创建随机整数生成器对象,并得到一个随机数
        Random rand = new Random();  
        int randomCount = rand.Next(99);

        //创建一个包含PrintLow或PrintHigh的委托对象,并将其赋值给del变量
        if (randomCount < 20)
        {
            del = new MyDel(program.PrintLow);
        }
        else
        {
            del = new MyDel(program.PrintHigh);
        }

        del(randomCount);     //执行委托,等同于del.Invoke(randomCount);
    }

注意:1,虽然委托类型声明看上去和方法声明一样,但它不需要在类内部声明

2,委托所包含的方法,返回值类型和参数列表必须保持一致

3,为委托添加/减少方法

下面是栗子:

MyDel del= Program.PrintLow;     //这里省略了new操作,是创建委托的快捷语法,这里创建并初始化了一个委托

del += Program.PrintHigh;        //使用 += 运算符为委托增加方法

del -= Program.PrintLow;         //使用 -= 运算符从委托移除方法

4,使用匿名方法实例化委托

栗子如下:

class Program
{

delegate int Mydel(int value);

static void Main()
{

//注意,这里return语句很好的保持了和委托返回值类型int一致,
两者也必须保持一致

Mydel del  = delegate(int x)
             {
             return x+10;
             };
Console.WriteLine("0",del(6));
}

}

注意:1,如果委托是void 返回值类型,匿名方法就不能返回值

5,使用Lambda表达式

引入Lambda表达式代替匿名方法实例化委托,只是为了简化语法

其经常的简化用法,栗子:

 MyDel del = delegate (int x)  { return x + 1; };   //匿名方法

 MyDel del =          (int x)=>{ return x + 1; };   //Lambda表达式,省略delegate

 MyDel del =              (x)=>{ return x + 1; };   //Lambda表达式,省略参数类型int

6,其他

注意:1,应当适当地使用接口取代对委托的使用,以降低这种方法级别的耦合

其他像多播委托、泛型委托、Func 和 Action 委托、委托VS接口 等相关知识可以参考下面大佬链接:

(73条消息) C#学习笔记(三)—–C#高级特性中的委托与事件(上)_w343516704的博客-CSDN博客

(73条消息) 【C# 7.0 in a Nutshell】第4章 C#的高级特性——委托_c# in a nutshell_今岁成蹊的博客-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值