zoukankan      html  css  js  c++  java
  • c# 对于委托,事件,泛型的理解

    1.委托

    我对委托的理解是一个公共资源,可以把委托比作外卖小哥,外卖小哥可以帮商家A送货,也可以帮商家B送货,并且这些商家也不需要知道买他们东西的人的住址,这个送货的过程就是交给外卖小哥去做的。这样的话,分工很明确,自然整个过程的效率也提高了。

    委托是一种类型(委托类型),同意需要定义,实例化,之后才能调用,就像我们用class来定义一个类,用new 来实例化一个类一样的。委托用delegate来定义一个委托类型,同意用new来实例化一个委托对象。

    使用委托四步走

    (1)定义委托类型

         public delegate void StringProcessor(string s); 定义了一个委托,且规定了可以使用这个委托的规则,即 仅有一个string类型的参数,返回类型是void的方法

    (2)有一个合乎(1)中规定的方法

        public void SayHello(string msg)
         {
               Console.WriteLine(string.Format("Hello:{0}",msg));
         }

    (3)实例化一个委托对象

     StringProcessor processor = new StringProcessor(SayHello);

    (4)调用委托对象

       processor("Lily");

    2.事件

    事件类似于属性,属性是一组get,set的方法,而事件是一组add,remove的方法。

    3.泛型

    泛型相当于一个模板,假如A类需要实现功能F,B类也需要实现功能F,都是实现功能F,只是类型不一样,要怎样才能只写一个方法来实现呢?

    (1)写一个参数为object的方法,object是A的父类,也是B的父类,利用参数的协变是可以的,但是把object类型的输入参数强制转换成A或者B来使用

    (2)用泛型,传入参数是T类型的,在编译时,编译器会根据使用的情况来推测这个T类型具体时什么类型,不需要强制转换

    好处:1.减少强制类型转换,将检查类型

  • 相关阅读:
    PHP设计模式——迭代模式
    采用navicat导出表结构及数据insert声明
    [Angular] Protect The Session Id with https and http only
    [D3] Creating a D3 Force Layout in React
    [D3] Animate Chart Axis Transitions in D3 v4
    [D3] Animate with the General Update Pattern in D3 v4
    [Web Security] JSON Hijacking
    [Angular] Progress HTTP Events with 'HttpRequest'
    [RxJS] How To get the results of two HTTP requests made in sequence
    [RxJS] Avoid mulit post requests by using shareReplay()
  • 原文地址:https://www.cnblogs.com/xiaoxinstart/p/12862738.html
Copyright © 2011-2022 走看看