摘要:
c#中的泛型不支持特例化。所谓特例化就是针对 T 的不同实参,编写特定的代码。因此c#的泛型实际上都是一份代码,不会出现c++中的代码爆炸问题(缺点是让你的exe看起来很小)。唯一的例外是对值类型,因为值类型的大小不一致,所以需要生成新的代码,解决入栈出栈等实现问题,但逻辑上是一致的。一、泛型的语法二、协变和逆变协变这个词是怎么来的?据说是来自数学专业,难怪让人摸不着脑袋。要了解协变逆变,首先要了解类型转化的过程。类型系统支持类型转换,从子类可以转换成基类类型。假设子类有成员A,B, 父类有成员A,当子类对象转成父类,也就是客户端会把子类当作父类来用。当使用父类A成员,实际上就是使用子类的A成 阅读全文
摘要:
结构和类的共同点都是属于抽象数据类型,包含数据和数据的操作。不同点在于结构偏重于数据语意,而类偏重於行为语意。我们不关心对象内部是怎么实现的,我们关心的是他提供给我什么接口,有什么操作。从技术上来说,结构属于值类型,而类属于引用类型。结构不能指定继承基类类型,类可以。不过结构和类都能实现接口。一、应用场合结构的应用场合:一、自定义数据类型,数据成员是公开的,提供工具函数。二、抽象的数据类型,数据成员是密封的,提供相关的数据操作函数。总之,都是围绕数据作文章。类的应用场合:一、提供一组类,形成一个有机整体,形成一个系统,类数据成员是密封的,只提供相互通信的函数接口。类主要通过不同的类组成一个类间 阅读全文