泛型接口委托

接口

接口是一组抽象成员的集合。

C# interface来定义接口。

接口中不能有字段,也不能有构造函数,接口不能提供实现。

接口可以实现多继承
as关键字判断是否支持一个接口 null
is关键字判断是否实现一个接口 false

 

接口在以下情况特别有用:
只有一个层次结构,但是只有一部分派生类支持某个公共行为
需要构建的公共行为跨多个层次。(目前没有理解)

例如:接口类ICamera

VirtualCamera 继承ICamera();

ICamera camera=new VirtualCamera();

调用ICamera 中的方法,但实际是调用VirtualCamera的方法。

开辟了一个新的空间指向派生类对象VirtualCamera。

 

泛型

泛型就是通过参数化类型来实现在同一份代码上操作多种数据类型,利用“参数化类型”将类型抽象化,从而实现灵活的复用。

 List<T> name= new List<T>();

装箱 将值类型存放在栈上的 转换成存在堆上的引用类型

拆箱 反过来

与非泛型容器相比,提供更好的性能,不会导致装箱或拆箱的损耗

泛型更类型安全,因为只包含我们指定的类型

泛型有多种 Queue stack 等泛型类型 。还有种可以自动排序的SortedSet泛型。

public interface IBaseService<T>:IDisposable where T:BaseEntity

如上一个基类业务 对传入的T类进行操作,并限制T
例如传入User 则对User实体操作,传入Manager,则对Manager实体操作.
理解为参数化操作的类型,适应更多的类型,让同一份代码重用.
泛型接口

 

委托

本质上讲 委托是一个类型安全的对象(Object),它指向程序中另一个以后会被调用的方法。通俗的讲就是传方法。
包含3
1 它所调用的方法的名称
2 该方法的参数
3 该方法的返回值
关键字为delegate

下面给个委托的简单例子:

public delegate int BinaryOp(int x, int y);

 

    public class SimpLeMath

    {

        public int Add(int x, int y)

        {

            return x + y;

        }

        public int Subtract(int x, int y)

        {

            return x - y;

        }

    }

    class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("************delegate************");

            SimpLeMath a = new SimpLeMath();

            BinaryOp b = a.Subtract;//给委托一个方法名

            Console.WriteLine("10+10 is {0}", b(10, 10));

            Console.ReadLine();

 

        }

}
View Code

委托BinaryOp b指向方法Subtract 这样b就代替了方法Subtract

具体的实例 https://www.cnblogs.com/Alex-bg/archive/2012/05/13/2498043.html 参考这篇文章

委托还可以多路广播,一个委托对象可以维护一个调用方法的列表。使用+=操作符。按照方法列表的顺序执行方法。-=用来移除方法。

委托协变

 通过委托实现继承的感觉,类似于里氏替换原则。

 

posted @ 2019-10-29 16:09  最爱吃汤圆27  阅读(126)  评论(0编辑  收藏  举报