我可以将课程内部封闭,但外部密封吗?

Eri*_*tas 6 .net c#

在C#中,是否可以创建一个可以从内部派生(未密封)的类,但是然后阻止其他人在外部引用我的库继承自我的公共类(密封)?

Bro*_*ass 9

我想你可以创建类的构造函数,internal以便只有程序集中的其他类可以从它们派生,如果你仍然需要创建该类的实例,你可以提供一个工厂方法来返回实例.

编辑以添加示例:

public class MyFoo
{
    internal MyFoo()
    {
    }

    public static MyFoo CreateFoo()
    {
        return new MyFoo();
    }
}
Run Code Online (Sandbox Code Playgroud)


mqp*_*mqp 5

Eric Lippert指出了三种方法.tl; dr:不要密封你的类,但在你的类中包含一个内部抽象方法,或者使所有构造函数都是内部或私有的,或者使用该PermissionSet属性向类中添加元数据.

http://blogs.msdn.com/b/ericlippert/archive/2008/09/26/preventing-third-party-derivation-part-one.aspx

http://blogs.msdn.com/b/ericlippert/archive/2008/10/06/preventing-third-party-derivation-part-two.aspx