C# 委托

委托是什么?

委托是一种特殊的对象类型,它定义了方法的类型,使得可以将方法当作一个参数在另一个方法中传递。

为什么要引入委托?看下面一个打招呼的例子。。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace DelegateLearn

{

    public class ClPeople

    {

        public void saychinese(string strName)

        {

            Console.WriteLine(strName+"你好!");

        }

        public void DoWork(string strName)

        {

            saychinese(strName);

        }

    }

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace DelegateLearn

{

    class Program

    {

        static void Main(string[] args)

        {

            ClPeople cp = new ClPeople();

            cp.DoWork("中国");

        }

    }

}

想过木有?如果打招呼的是个英国人呢?看不懂中文的呀?咋办。。如下:

红色是 追加的代码。。。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace DelegateLearn

{

    public class ClPeople

    {

        public void saychinese(string strName)

        {

            Console.WriteLine(strName+"你好!");

        }

       public void sayenglish(string strName)

        {

            Console.WriteLine(strName+"Hello!");

        }

        public enum Language

        {

            English,Chinese

        }

        public void DoWork(string strName,Language lanName )

        {

            switch (lanName)

            { 

                case Language.Chinese:

                    saychinese(strName);

                    break;

                case Language.English:

                    sayenglish(strName);

                    break;

            }

        }

        

    }

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace DelegateLearn

{

    class Program

    {

        static void Main(string[] args)

        {

            ClPeople cp = new ClPeople();

            cp.DoWork("中国",ClPeople.Language.Chinese);

            cp.DoWork("Chinese",ClPeople.Language.English);

        }

    }

}

一次类推如果打招呼的是个法国人?or阿拉伯人?or韩国人呢?总不能接着改DoWork接着case吧?接着判断吧?呵呵。。当然不能了。。所以:有了委托。。。

委托关键字:delegate  格式(定义委托的语法):delegate void(返回值类型) SayDelegate(委托名称)();

注意:所定义的委托是参数 返回值。。是一样的。。。委托对方法就好像是 string  对 字符串一样。。(个人理解)

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

namespace DelegateLearn
{
    //定义一个委托
    public delegate void SayDelegate(string strName);
    public class ClPeople
    {
        public void saychinese(string strName)
        {
            Console.WriteLine(strName+"你好!");
        }

        public void sayenglish(string strName)
        {
            Console.WriteLine(strName+"Hello!");
        }
        /// <summary>
        /// 描述
        /// </summary>
        /// <param name="strName">姓名</param>
        /// <param name="sdMakeSay">方法参数</param>
        public void DoWork(string strName,SayDelegate sdMakeSay)
        {
            sdMakeSay(strName);
        }
        
    }
}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace DelegateLearn

{

    class Program

    {

        static void Main(string[] args)

        {

            ClPeople cp = new ClPeople();

            cp.DoWork("中国",cp.saychinese);

            cp.DoWork("Chinese",cp.sayenglish);

        }

    }

}


 其实。。委托不同于sting的一个特性;就是可以把多个方法赋给一个委托,或者说将多个方法绑定到一个委托上。。也就是多播委托。。如下:

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

namespace DelegateLearn
{
    class Program
    {
        static void Main(string[] args)
        {
            ClPeople cp = new ClPeople();
            cp.DoWork("中国",cp.saychinese);
            cp.DoWork("Chinese",cp.sayenglish);
            //第一个方法绑定
            SayDelegate delegate1 = cp.saychinese;
            //第二个方法绑定。。。。。
            delegate1 += cp.sayenglish;
            cp.DoWork("中国",delegate1);
        }
    }


 

以上纯属个人理解。。有错请指导。。。不喜勿喷。。。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值