当前位置:  开发笔记 > 编程语言 > 正文

仅在C#中的程序集内部可继承

如何解决《仅在C#中的程序集内部可继承》经验,为你挑选了3个好方法。

在C#中,有没有办法指定一个类只能由同一程序集中存在的类继承,而其他程序集应该像公共密封类型一样.



1> Marc Gravell..:

我认为Eric Lippert在这里得到了定义的引用:

防止第三方派生第一部分

防止第三方派生第二部分



2> Michael Mead..:

语言本身没有任何使这很容易的东西,但你应该能够通过使你的构造函数内部来做到这一点.但是,如果这样做,您将无法从外部程序集中新建它,因此您必须添加工厂方法.

public class Foo
{
    internal Foo()
    {
    }

    public Foo Create()
    {
        return new Foo();
    }
}

这是一个替代方案,可以让您在外部程序集中新建类

public sealed class Foo : FooBase
{

}

public class FooBase
{
    internal FooBase() { }
}

但是,您可能会问自己的一个问题就是您希望密封课程的原因.有时这是不可避免的,但我已经看到sealed关键词经常被滥用,以至于我认为我会提起它.通常,开发人员会密封类,因为它们对代码过度保护. 大多数情况下,如果一个类设计得很好,就不需要密封.



3> Andrew Arnot..:

如果你的类是抽象的,那么有一个非常简单的方法:

public abstract class Foo {
    internal abstract void DoNothing();
    // ... other members
}

现在,尽管您的类和大多数成员都是公共的,但内部抽象成员使得无法从程序集外部的类派生.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有