C#中的委托delegate(2)

本文介绍了C#中的委托概念,展示了如何定义及使用委托,并提供了具体的代码实例,包括基本的委托调用和多方法绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种方法动态地给参数赋值的做法,可以避免在程序中大量使用if-else(switch)语句,同时具有更好的可扩展性。

using System;
using System.Collections.Generic;
using System.Text;

namespace Delegate {
     //定义委托,它定义了可以代表的方法的类型
     public delegate void GreetingDelegate(string name);
        class Program {

           private static void EnglishGreeting(string name) {
               Console.WriteLine("Morning, " + name);
           }

           private static void ChineseGreeting(string name) {
               Console.WriteLine("早上好, " + name);
           }

           //注意此方法,它接受一个GreetingDelegate类型的方法作为参数
           private static void GreetPeople(string name, GreetingDelegate MakeGreeting) {
               MakeGreeting(name);
            }

           static void Main(string[] args) {
               GreetPeople("Han", EnglishGreeting);
               GreetPeople("韩", ChineseGreeting);
               Console.ReadKey();
           }
        }
    }

输出如下:
Morning, Han
早上好, 韩

所以也可以这样赋值

string name1,name2;
name1 = "Han";
name2 = "韩";

GreetPeople(name1,EnglishGreeting);
GreetPeople(name2,ChineseGreeting);
Console.ReadKey();

既然委托GreetingDelegage和类型string地位一样,都是定义了一种参数类型,那么

static void Main(string[] args) 
{
    GreetingDelegate delegate1,delegate2;
    delegate1 = EnglishGreeting;
    delegate2 = ChineseGreeting;

    GreetPeople("Han",delegate1);
    GreetPeople("韩",delegate2);
    Console.ReadKey();
}

委托不同于string,可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用所绑定的方法。

static void Main(string[] args) 
{
    GreetingDelegate delegate1;
    delegate1 = EnglishGreeting;//先给委托类型的变量赋值
    delegate1 += ChineseGreeting;//给委托变量再绑定一个方法
    //先后调用两个方法
    GreetPeople("Han",delegate1);
    Console.ReadKey();
}
输出为:
Morning,Han
早上好,韩

或者,也可以绕过GreetPeople方法,通过委托来直接调用EnglishGreeting和ChineseGreeting:

static void Main(string[] args) {
    GreetingDelegate delegate1;
    delegate1 = EnglishGreeting; // 先给委托类型的变量赋值(这里注意,第一次用的“=”,是赋值的语法;第二次,用的是“+=”,是绑定的语法。如果第一次就使用“+=”,将出现“使用了未赋值的局部变量”的编译错误。)
    delegate1 += ChineseGreeting; // 给此委托变量再绑定一个方法

    // 将先后调用 EnglishGreeting 与 ChineseGreeting 方法
    delegate1 ("Jimmy Zhang");   
    Console.ReadKey();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值