C#系列---⑫委托如何使用,C#中自带哪些委托

①、什么是委托?

C#中的委托(Delegate)类似于C或C++中的函数指针。委托是存有对某个方法的引用的一种引用类型变量。引用可在运行时改变。委托声明决定了可由该委托引用的方法,委托可指向一个与其具有相同标签的方法。

一旦声明了委托类型,委托对象必须使用new关键字来创建,且与一个特定的方法有关。当创建委托时,传递到new语句的参数就像方法调用一样书写,但是不带有参数。

(通俗讲就是委托别人去做,本来应该自己去做的事情,即将做事的方法委托)

②、什么是委托的多播?

委托对象可使用"+"运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。“-”运算符可用于从合并的委托中移除组件委托。

使用委托的这个有用的特点,您可以穿件一个委托被盗用的方法的调用列表。这被称为委托的多播,也叫组播。

(通俗讲就是,委托别人做事,别人做完一件事后,又让别人接着做其他事情,即多个做事方法的委托)

③、什么时候用委托?

个人现阶段认为:想要将方法作为参数使用的时候。

④、为什么用委托,给我们带来哪些方便?

通过此次的机房重构,很直观的一个作用就是减少了冗余代码。

⑤、设计模式中哪个模式用到了委托?

观察者模式

⑥、委托与事件的区别?

委托中没有通知的成分,个人感觉更像数据库中的触发器;而事件则是在发生其他类或对象关注的事情时,类或对象可通过事件通知。

⑦、代码展示如何使用委托:

我们平常书写的委托形式:

//定义一个委托相当于定义一个新类,所以可以定义类的地方都可以定义委托。
//委托:函数作为参数,可以调用多个方法。
    public delegate void MyDelegate(string str);           //声明无参委托
    public delegate int MyDelegate2(string str, int age); //声明有参委托
    class Program
    {
        static void Main(string[] args)
        {
            //无返回值的委托
            MyDelegate dele = new MyDelegate(WriteName);  //实例化一个委托实例,传入的参数为方法
            dele += GetAge;                               //通过+=增加委托实例对象,即委托可以调用多个方法
            dele("WriteName");                            //执行委托,并赋值

            //有返回值的委托
            MyDelegate2 dele2 = new MyDelegate2(GetPerson);
            int age = dele2("路飞", 18);
            Console.WriteLine(age);

            Console.ReadKey();
        }

        static void WriteName(string name)
        {
            Console.WriteLine(name);
        }

        static void GetAge(string age)
        {
            Console.WriteLine(age);
        }

        static int GetPerson(string name,int age)
        {
            return age;
        }
    }

然而在C#中,系统为我们已经封装了两个委托,Action,Func

那用法如何呢,方法的内容不变,我们展示一下main函数中的区别?

class Program
    {
        static void Main(string[] args)
        {
          
            //系统自带Action委托
            Action<string> action = new Action<string>(WriteName);
            action("路飞");
            //系统自带Func委托
            Func<string, int, int> func = new Func<string, int, int>(GetPerson);
            func("路飞", 18);
            Console.WriteLine(age);
            Console.ReadKey();
        }

采用系统自带的委托,省去了我们每次重新定义委托的过程,代码更加精简。

以上是个人的初步学习,哪位大佬有更好的解说和示例,还望多多指导^_^

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Elsa~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值