2016-09-30 5 views
0

私はこのような状況をしたと仮定します。この構造体を宣言内部クラスのパブリックプロパティを作成しますか?

基本クラスまたはマザークラス:あなたは私は1つの場所ですべてのメソッドにアクセスするためのシングルトンの基本クラスを実装したい見ることができますどのように

public static class Mother 
{ 
    private static Childs _child = new Childs(); 

    public static Childs Child 
    { 
      get { return _child; } 
    } 
} 

次のように:Mother.Child.SomeMethod。

この構造で私はより良いコード構成を持っています。

私は内部クラスとしてのみチャイルドクラスを作成したいので、ここでは問題を開始します。内部クラスのパブリックプロパティを作成できないためです。内部クラスの構造は次のとおりです。

internal class Childs 
{ 
    public static bool SomeMethod() { ... } 
} 

どのように内部クラスのパブリックプロパティを作成できますか?

+0

「公開」とは、「可能な限り公開」を意味します。クラスは 'internal'なので、このメソッドは同じ可視性を持ちます。これは同じアセンブリ内でしか見ることができません。 –

答えて

1

子が内部の場合は、スタティックアクセスポイントも内部である必要があります。

実際に子供の一部のメンバーにパブリックアクセスを希望する場合は、インターフェイスの使用を検討してください。

とにかく、静的アクセスポイントがある場合は、メンバーを静的にする必要はありません。

public static class Mother 
{ 
    private static Child _child = new Child(); 

    public static IChild Child 
    { 
      get { return _child; } 
    } 
} 

public interface IChild 
{ 
    // public stuff here 
    bool SomeMethod(); 
} 


internal class Child : IChild 
{ 
    public bool SomeMethod() { ... } 
    // additional internal members here 
} 
0

これはできません。プロパティがpublicであれば、他のクラスからアクセスできます。しかし、それを得ることができれば、受け取っているクラスにもアクセスできる必要があります。

1

継承ツリー内のすべてのクラスは、階層内の最高クラスと少なくとも同じ可視性を持たなければなりません。パブリッククラスを内部クラスから派生させる方法はありません。

多分Childsクラスpublicです。必要に応じて、abstractをインスタンス化しないようにするか、コンストラクタを内部にして別のアセンブリで派生しないようにすることができます。

+0

私はそれを公式の抽象として宣言すれば、とにかく徹底的なアセンブリでそれを見ることができます。 – Unchained

+0

あなたはそれを見ることができますが、再利用することはできません。最上位レベルのクラスは 'public'なので、別のアセンブリからそれを隠す方法はありません。その下のすべてのクラスも公開する必要があります。 –

+0

うーん、 '抽象'はそれを継承することを止めないだろうか?そのためには 'sealed'を使います。 – juunas

関連する問題