c# 委托

 

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

 

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

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值