接口
接口是一组抽象成员的集合。
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(); } }
委托BinaryOp b指向方法Subtract 这样b就代替了方法Subtract。
具体的实例 :https://www.cnblogs.com/Alex-bg/archive/2012/05/13/2498043.html 参考这篇文章
委托还可以多路广播,一个委托对象可以维护一个调用方法的列表。使用+=操作符。按照方法列表的顺序执行方法。-=用来移除方法。
委托协变
通过委托实现继承的感觉,类似于里氏替换原则。