1,不彻底的abstract
interface in_one{ void a();} 【程序编程相关:“盗版”、“知识产权”等易混淆和错用的词】
即使是abstract class,也不能对实现的接口的某个成员视而不见,即下面这样是不允许的: 【推荐阅读:李纳斯·托沃兹(Linus T】
这一点上还是java方便,不管c#的初衷是什么 【扩展信息:RFC1312 中文版】
abstract class base_one : in_one{ }
2,out参数与指针的指针
out子类不能转化为out基类,如果允许转换的化,将无法保证类型安全性;即out参数相当于指针的指针,而父类的指针与子类的指针是没有继承关系的,所以不能转化
3,强制针对接口编程
针对接口编程只是一个一般性的原则,但c#提供了一种机制,强迫客户程序员根据接口来引用你的实现类:重写接口成员时使用全名称,并且去掉public修饰
interface a{ void a(); }
class a_sub:a { void a.a() { } } static void main(string[] args) { ((a)new a_sub()).a(); //ok! new a_sub().a(); //error! }
4,@ 取消转义
取消字符串转义尚可理解,不过连关键字都变成普通标识了,实在看不出有多大意义
5,struct的构造函数
自定义的ctor并不能隐藏默认的无参构造函数,稍有意外,却也在情理之中,默认无参构造函数对于struct有良好定义的语义
6,const,readonly
... 下一页