首页 新闻 会员 周边

一个类的方法,能不能让他的子类不能用,其他地方能调用

-1
悬赏园豆:5 [已解决问题] 解决于 2013-10-22 23:11

一个类的方法,能不能让他的子类不能用,其他地方能调用

拖鞋王子的主页 拖鞋王子 | 初学一级 | 园豆:37
提问于:2012-06-10 23:12
< >
分享
最佳答案
1

一旦你有某个"很奇怪的设计需求“,那么多半是你的想法出了问题。

收获园豆:5
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-06-10 23:15
其他回答(2)
0

public internal proected private。如果子类不能使用父类的属性或方法,那父类只能是private。而如果一个类的方法,可以被从外部访问,那至少是 internal。这样,完全不是一个访问级别的。

其实,这句话的表述不太正确。这个“其他地方”的含义比较广。比如程序集内部,另一个程序集,以及客户端代码。这几个地方,差别很大。体现了软件设计思想。

还有,不仅仅是是否可以访问的问题。如果仅仅是调用,那没关系,但是调用了,却改变了类的属性值,这就有问题了。 

从软件设计角度,也不准确。为什么要有类的父类,换句话说基类,基类和子类是“is-a”的关系。外部的类,跟一个具有继承关系的类之间,没有必然关系。除非使用接口。而外部类使用一具有继承关系的类,大都通过组合,绝对不可能出现,连子类都不让用的方法,而这个外部类可以用。因为,这完全“篡权”了,访问权限乱了。外部类通常只能使用一个类的 public 或 internal 方法。

船长&CAP | 园豆:318 (菜鸟二级) | 2012-06-11 01:36
1

把方法定义为internal,能让同模块内的别的地方能使用,但是,非同模块中派生的子类不能使用。

这个是唯一的方法。

 

水牛刀刀所说,虽然这样不能说绝对,但还是最好遵循这个原则。

试想,一个祖宗的东西,都能给外人使用了,却不给自己的子孙使用,这样的祖宗对子孙来说有什么用?

BILL GATES是把他的财产捐献了,让她的子女不享有他的财产继承,这样的例子似乎也不多,而且,象BILL GATES这样的,一般都是多的冒油的财产,否则。。。他的子女能不骂死他?

无之无 | 园豆:5095 (大侠五级) | 2012-06-11 08:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册