12

同じアセンブリ内の型から継承できるが、アセンブリの外部からは継承できない型を作成したい。タイプをアセンブリの外部に表示したいのですが。

これは可能ですか?

4

2 に答える 2

20

コンストラクターを内部にすることができます:

public class MyClass
{
    internal MyClass() { }
}

基本クラスから派生するすべてのクラスは、そのコンストラクターで基本クラスのコンストラクターを呼び出す必要があります。基本クラスが別のアセンブリにある場合はコンストラクターを呼び出すことができないため、派生クラスはコンパイルされません。

于 2010-06-18T18:12:57.937 に答える
1

この質問は、意味的に正しい答えからまだ恩恵を受けることができると思います...それは「いいえ」です。タイプを「外部アセンブリのみにシール」として宣言することはできません。

誤解しないでください。dtbの答​​えは良いものです。内部コンストラクターは、目的の結果から取得できる最も近いものです。

ただし、これを読んでいる人は、この例でMyClassは実行時に封印されているとは説明されていないことに注意する必要があると思います。これが問題になる可能性は低いですが、(コードまたはサードパーティライブラリからの)リフレクションに基づくロジックがこの特定のタイプで異なる動作をする可能性がある場合。それは覚えておくべきことです。

そして今、dtbのサンプルコードをさらに拡張するには:

public class MyClass
{
    internal MyClass() { }

    // This factory method will be accessible from external assemblies, making your class instantiable yet still "sealed"
    public static MyClass Create()
    {
        return new MyClass();
    }
}

MyClassこのようにして、継承の制御を維持しながら、所有するアセンブリの外部からインスタンスを作成できます。

于 2018-10-12T19:59:28.283 に答える