一旦你有某个"很奇怪的设计需求“,那么多半是你的想法出了问题。
public internal proected private。如果子类不能使用父类的属性或方法,那父类只能是private。而如果一个类的方法,可以被从外部访问,那至少是 internal。这样,完全不是一个访问级别的。
其实,这句话的表述不太正确。这个“其他地方”的含义比较广。比如程序集内部,另一个程序集,以及客户端代码。这几个地方,差别很大。体现了软件设计思想。
还有,不仅仅是是否可以访问的问题。如果仅仅是调用,那没关系,但是调用了,却改变了类的属性值,这就有问题了。
从软件设计角度,也不准确。为什么要有类的父类,换句话说基类,基类和子类是“is-a”的关系。外部的类,跟一个具有继承关系的类之间,没有必然关系。除非使用接口。而外部类使用一具有继承关系的类,大都通过组合,绝对不可能出现,连子类都不让用的方法,而这个外部类可以用。因为,这完全“篡权”了,访问权限乱了。外部类通常只能使用一个类的 public 或 internal 方法。
把方法定义为internal,能让同模块内的别的地方能使用,但是,非同模块中派生的子类不能使用。
这个是唯一的方法。
如水牛刀刀所说,虽然这样不能说绝对,但还是最好遵循这个原则。
试想,一个祖宗的东西,都能给外人使用了,却不给自己的子孙使用,这样的祖宗对子孙来说有什么用?
BILL GATES是把他的财产捐献了,让她的子女不享有他的财产继承,这样的例子似乎也不多,而且,象BILL GATES这样的,一般都是多的冒油的财产,否则。。。他的子女能不骂死他?