【发布时间】:2011-12-25 21:28:22
【问题描述】:
我想知道是否有办法限制谁可以从类继承。
-
internal: 不允许类在程序集外继承 -
sealed: 类不能被继承
是否有关键字或方法只允许某些类(假设仅从它自己的命名空间)继承该类?
另外,我不希望这个特殊的类是通用的。 我关心的不是安全性,而是总体设计。
我想要的示例:
- A 类。
- B 类继承自 A
- C 类不能从 A 继承
【问题讨论】:
-
将类设为内部不仅可以防止外部类继承,还可以防止使用它。为了防止外部子类,您需要特殊技巧,例如
internal abstract方法,而这在接口上不起作用。 -
你想要什么样的限制?你看过InheritanceDemand吗? palisade.plynt.com/issues/2006Apr/link-demand
-
请注意,限制到命名空间并不能提供太多保护,因为流氓程序集可以只说
namespace Awesome { public class Stolen : Secret {} },现在他们可以使用Awesome.Stolen访问Awesome.Secret。 -
@odyodyodys:那么你可能应该一开始就这么说。这很容易做到。使所有构造函数内部化。那么只有同一个程序集中的类可以继承,因为继承需要一个可访问的ctor。
-
好的,现在我只是不明白这个问题。您有两个类在同一个程序集中,并且您希望其中一个类不从另一个类继承。好的,那你需要我们做什么?这是你的代码;随心所欲地写!你不需要一个特殊的关键字来阻止你做一些你知道你不应该做的事情。