在C#中,有没有办法指定一个类只能由同一程序集中存在的类继承,而其他程序集应该像公共密封类型一样.
我认为Eric Lippert在这里得到了定义的引用:
防止第三方派生第一部分
防止第三方派生第二部分
语言本身没有任何使这很容易的东西,但你应该能够通过使你的构造函数内部来做到这一点.但是,如果这样做,您将无法从外部程序集中新建它,因此您必须添加工厂方法.
public class Foo { internal Foo() { } public Foo Create() { return new Foo(); } }
这是一个替代方案,可以让您在外部程序集中新建类
public sealed class Foo : FooBase { } public class FooBase { internal FooBase() { } }
但是,您可能会问自己的一个问题就是您希望密封课程的原因.有时这是不可避免的,但我已经看到sealed
关键词经常被滥用,以至于我认为我会提起它.通常,开发人员会密封类,因为它们对代码过度保护. 大多数情况下,如果一个类设计得很好,就不需要密封.
如果你的类是抽象的,那么有一个非常简单的方法:
public abstract class Foo { internal abstract void DoNothing(); // ... other members }
现在,尽管您的类和大多数成员都是公共的,但内部抽象成员使得无法从程序集外部的类派生.