在C#中是否可以创建一个可以从内部派生(未密封)的类,但是然后阻止其他人引用我的库从外部继承我的公共类(密封)?
答案 0 :(得分:9)
我想你可以创建类internal
的构造函数,以便只有程序集中的其他类可以从它们派生,如果你仍然需要创建该类的实例,你可以提供一个工厂方法来返回实例
编辑以添加样本:
public class MyFoo
{
internal MyFoo()
{
}
public static MyFoo CreateFoo()
{
return new MyFoo();
}
}
答案 1 :(得分:5)
Eric Lippert指出了三种方法。 tl; dr:不要密封你的类,但是在你的类中包含一个内部抽象方法,或者让所有构造函数都是内部或私有的,或者使用PermissionSet
属性向类中添加元数据。
答案 2 :(得分:0)
您也可以尝试这样做。
internal class InternalExtendible
{
public string MyProperty { get; set; }
}
public sealed class ExternalSealedClass : InternalExtendible
{
}
创建一个Internal类并创建一个继承自内部类的公共空类。引用dll时,只有公共类对用户可见,但内部类的所有功能都将被公开。