The C# Programming Language Notes

1,不彻底的abstract

即使是abstract class,也不能对实现的接口的某个成员视而不见,即下面这样是不允许的:

interface in_one{
void A();
}

abstract class base_one : in_one{
}

这一点上还是Java方便,不管C#的初衷是什么

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!
}

( The Java Programming Language Notes )

Published At
Categories with Web编程
Tagged with
comments powered by Disqus