【C#基础教程】第十九章、委托

目录

委托

1.委托

2.委托链(组合委托)

 2.1 调用带返回值的委托

 2.2调用带引用参数的委托


委托

1.委托

  委托的意义:C#中委托的存在为很多特性打下了基础

  委托的定义:委托是类类型。只有类才会有对象

  委托的作用:

  • 可以把委托理解为对函数的包装,它使得C#中的函数可以作为参数来传递作用上来看,相当于C++中的函数指针
  • 简单的说,委托是一个持有一个方法或多个方法的对象。而委托与对象的区别在于:你可以执行委托。当你执行委托时,委托对象则会执行它持有的方法。
  • 用生活中的事件举例,委托对象就像是一个律师、方法就是律师当事人的证词、整个过程就是当事人委托律师为自己辩护。

 定义委托类型的语法:(与方法类似)

                        访问修饰符 delegate 返回类型 委托名(类型1 变量1,类型2 变量2);

  声明委托变量并实例化:

                        委托名  变量  =  new 委托名(对象.方法);

  使用委托的要求:

  • 对于委托包装的方法
    • 方法的返回类型和参数必须和委托一致

  委托的使用: 

        委托的使用分为四步:1.定义委托类型、2.声明委托变量并实例化、3.作为参数传递给方法、4.调用委托。

class Program
{
    //1.定义委托类型、
    public delegate void MyDelegate(int x,int y);
    
    static void Main(string[] args)
    {
        //2.声明委托变量并实例化、
        //注意1:传递的方法可以为实例、也可以为静态。
        //注意2:委托的实例化是用一个不带括号的方法名作参数
        MyDelegate a = new MyDelegate(new Program().Add);

        //3.作为参数传递给方法、
        Method(a);
    }
    
    void Add(int x,int y)
    {
        Console.WriteLine("两数总和为{0}",x+y);
    }
    //方法的参数是委托类型
    void Method(MyDelegate a)
    {
        //4.隐式调用委托。
        a(2,3);
        //显式调用委托
        a.Invoke(2,3);
    }
}

2.委托链(组合委托)

  委托链的定义:委托链是委托类型。我们把链接了多个方法的委托称为委托链或多路广播委托。

  委托链的使用:

class Program
{
    //1.定义委托类型、
    public delegate void MyDelegate();
    
    static void Main(string[] args)
    {
        //2.声明并实例化委托
        MyDelegate a = new MyDelegate(new Program().method1);
        MyDelegate b = new MyDelegate(Program.method2);

        //3.声明委托变量,并初始化为null
        MyDelegate c = null;

        //4.使用+号来链接委托,使委托变成委托链
        MyDelegate c += a;
        MyDelegate c += b;

        //5.使用-号来移除委托
        MyDelegate c -= a;
        
        //调用委托链
        c();
    }
    
    void method1()
    {
        Console.WriteLine("这是实例方法");
    }

    static void method2()
    {
        Console.WriteLine("这是静态方法");
    }
}

 2.1 调用带返回值的委托

调用带返回值的委托时:

  • 返回调用列表最后一个方法的返回值,其他的返回值会被忽略。

 2.2调用带引用参数的委托

调用带引用参数的委托时:

  • 在调用列表中的下一个方法时,参数的新值(不是初始值)会传给下一个方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C# 委托(Delegate)是一种类型,它可以用于封装一个或多个方法,使其可以像其他对象一样传递、存储和调用。委托在事件处理、多线程等方面有着广泛的应用。 C# 委托的声明方式与方法类似,可以带有参数和返回值类型,例如: ```csharp public delegate int Calculate(int a, int b); ``` 上面的代码声明了一个名为 `Calculate` 的委托类型,它包含两个 `int` 类型的参数并返回一个 `int` 类型的值。接下来可以使用这个委托类型来封装一个或多个方法。 委托的使用步骤如下: 1. 声明委托类型 ```csharp public delegate void MyDelegate(string message); ``` 2. 定义委托变量 ```csharp MyDelegate myDelegate; ``` 3. 实例化委托变量 ```csharp myDelegate = new MyDelegate(MethodA); ``` 4. 调用委托 ```csharp myDelegate("Hello"); ``` 完整的示例代码如下: ```csharp using System; namespace DelegateDemo { public delegate void MyDelegate(string message); class Program { static void Main(string[] args) { MyDelegate myDelegate; myDelegate = new MyDelegate(MethodA); myDelegate += new MyDelegate(MethodB); myDelegate("Hello"); } static void MethodA(string message) { Console.WriteLine("MethodA: " + message); } static void MethodB(string message) { Console.WriteLine("MethodB: " + message); } } } ``` 上面的代码定义了一个名为 `MyDelegate` 的委托类型,包含一个 `string` 类型的参数并返回一个 `void` 类型的值。在 `Main` 方法中,首先将 `myDelegate` 委托变量实例化为 `MethodA` 方法,然后再将其实例化为 `MethodB` 方法。最终调用 `myDelegate` 委托变量时,将会依次调用 `MethodA` 和 `MethodB` 方法。 除了以上示例中的简单委托,还有多播委托、泛型委托、匿名委托等更加高级的委托用法,可以根据具体需求选择使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ohrkaninchen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值