C# 我可以使一个类内部未密封,但外部密封吗?
在C#中,是否可以生成一个可以从内部派生的类(未密封),但防止外部引用我的库的其他人从我的公共类继承(已密封)?我想您可以将类的构造函数设置为C# 我可以使一个类内部未密封,但外部密封吗?,c#,.net,C#,.net,在C#中,是否可以生成一个可以从内部派生的类(未密封),但防止外部引用我的库的其他人从我的公共类继承(已密封)?我想您可以将类的构造函数设置为内部,以便只有程序集中的其他类可以从中派生,如果仍然需要创建该类的实例,可以提供一个工厂方法来返回实例 编辑以添加示例: public class MyFoo { internal MyFoo() { } public static MyFoo CreateFoo() { return new My
内部
,以便只有程序集中的其他类可以从中派生,如果仍然需要创建该类的实例,可以提供一个工厂方法来返回实例
编辑以添加示例:
public class MyFoo
{
internal MyFoo()
{
}
public static MyFoo CreateFoo()
{
return new MyFoo();
}
}
Eric Lippert指出了三种方法。tl;dr:不要密封类,而是在类中包含一个内部抽象方法,或者将所有构造函数设置为内部或私有,或者使用属性向类添加元数据
您也可以尝试这样做
internal class InternalExtendible
{
public string MyProperty { get; set; }
}
public sealed class ExternalSealedClass : InternalExtendible
{
}
创建内部类并创建从内部类继承的公共空类。当引用dll时,只有公共类对用户可见,但内部类的所有功能都将公开。我有过这样的想法,但最大的问题是,如果有公共可访问的方法使用或返回此类型,那么签名是什么?如果您使用
ExternalSealedClass
,您的“真正”继承人将不合格。如果使用InternalExtensible
,您的方法就不能再公开了。@mquander您不能通过编程到接口来解决这个问题吗?i、 e.您的签名看起来像“作废DoSomething(IExtendableOrSealed item){…}”