c# 委托

本文深入探讨了C#委托的概念及其在方法传递、动态调用和扩展功能方面的核心作用,通过实例展示了如何使用委托来提高代码的灵活性和可扩展性。

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

 

一、委托的两个最主要的作用:

 

1、委托是对方法或者方法列表的引用,实例化后的委托对象会将给定的参数传递给它所回调的方法,并去执行方法。

2、委托可以将某一个方法当作另一个方法的参数来进行传递,利用这种方法便可以动态的给方法赋值,避免了在程序中大量的使用If-Else(Switch)语句,使得程序具有更好的可扩展性。

 

二、委托的具体实现步骤

 

1、声明一个委托,其返回值和参数形式一定要和想要包含的方法的返回值与参数形式一致。

 public delegate void DelegateGreeting(string name);

 

2、提供要处理的方法

        private static void GreetPeople(string name)

        {

            Console.WriteLine("Hello,"+name);

            Console.ReadLine();

        }

3、创建委托对象并将所希望的方法包含在委托对象中。

DelegateGreeting MyDelegateGreeting=new DelegateGreeting(GreetPeople);

4、通过委托对象调用包含在其中的各个方法。

MyDelegateGreeting("Darren liu”);

 

完整代码如下:

 

namespace 委托

{

    class 委托1

    {

 

        public delegate void DelegateGreeting(string name);

 

        static void Main(string[] args)

        {

            DelegateGreeting MyDelegateGreeting=new DelegateGreeting(GreetPeople);

            MyDelegateGreeting("Darren liu");

        }

       

 

        private static void GreetPeople(string name)

        {

            Console.WriteLine("Hello,"+name);

            Console.ReadLine();

        }

    } 

}

通过上述代码,我们可以看到,所谓的委托就是一个可以保存方法的变量。委托的最终目的就是把一个类的某个方法传递到另一个类中去调用而无需传递前一个类的对象。

 

三、委托链

委托链就是将多个方法捆绑到同一个委托对象上。当调用这个委托对象时,将会依次调用委托链中的方法。

完整代码如下:

namespace 委托

{

    class Delegate2

    {

        public delegate void DelegateGreeting(string name);

        static void Main(string[] args)

        {

            DelegateGreeting MyDelegateGreeting = new DelegateGreeting(ChineseGreeting.CGreeting);

            MyDelegateGreeting += EnglishGreeting.EGreeting;

            //   MyDelegateGreeting -= ChineseGreeting.CGreeting;

            MyDelegateGreeting("Darren liu");

        }

    }

 

    class EnglishGreeting

    {

        public static void EGreeting(string name)

        {

            Console.WriteLine("Morning," + name);

            Console.ReadLine();

        }

    }

    class ChineseGreeting

    {

        public static void CGreeting(string name)

        {

            Console.WriteLine("早上好," + name);

            Console.ReadLine();

        }

    } 

四、委托可以将某一个方法当作另一个方法的参数来进行传递,代码如下:

 

public delegate void GreetingDelegate(string name);

 

    class Delegate2

    {

        private static void EnglishGreeting(string name)

        {

            Console.WriteLine("Morning, " + name);

        }

        private static void ChineseGreeting(string name)

        {

            Console.WriteLine("早上好, " + name);

        }

        private static void GreetPeople(string name, GreetingDelegate MakeGreeting)

        {

            MakeGreeting(name);

        }

        static void Main(string[] args)

        {

            GreetPeople(“Darren liu ", EnglishGreeting);

            GreetPeople(“Darren liu", ChineseGreeting);

            Console.ReadKey();

        }

 

    } 

我们可以分析以上代码,把一个委托对象GreetingDelegate MakeGreeting当作一个方法GreetPeople的参数传入该方法中。当传入的方法是EnglishGreeting时,也就是说该委托对象MakeGreeting所指定的方法就是EnglishGreeting。因此在Main中执行GreetPeople(“Darren liu ", EnglishGreeting)时,也就是执行的EnglishGreeting方法。

 

转载于:https://www.cnblogs.com/darrenliu/p/4412500.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值