2011-02-05 15 views

答えて

5

いいえ、ありません。ネストされていない限り、プライベートクラスを持つことはできません。

2

インナークラス以外のシナリオでは、「プライベート」クラスを使いたいですか?

修飾子internalを使用すると、現在のアセンブリでのみ表示されるクラスを作成できます。

// the class below is only visible inside the assembly in where it was declared 
internal class MyClass 
{ 
} 
2

号 ようなクラスのスコープとは何でしょうか?

+3

私はOPがJavaでより経験が豊富で、同じソースファイル内で可視性があると思います。 –

30

単純にいいえ。他のクラスまたは構造体の中にネストされていない何もしない限り、そのネストされたクラスに

  • クラスと構造体は、公共または内部のいずれかになります。 publicとして宣言された型は、他の型からアクセス可能です。内部として宣言された型は、同じアセンブリ内の型によってのみアクセス可能です。 classキーワードとstructは、キーワードpublicがクラス定義に追加されていない限り、デフォルトでのinternalとして宣言されます。

  • クラスまたは構造体定義では、アクセスレベルを明示的にするためにinternalキーワードを追加できます。アクセス修飾子は、クラスまたは構造体自体には影響を与えません。常に、それ自体とそのメンバーすべてにアクセスできます。

  • ネストされたクラスや構造体を含む構造体メンバーは、public、internal、またはprivateとして宣言できます。ネストされたクラスや構造体を含むクラスメンバーは、public、protected internal、protected、internal、privateのいずれかです。ネストされたクラスや構造体を含むクラスメンバーや構造体メンバーのアクセスレベルは、デフォルトではプライベートです。プライベートネストされた型は、包含する型の外部からアクセスできません。

  • 派生クラスは、基本型よりもアクセシビリティが高くありません。つまり、内部クラスAから派生したパブリッククラスBを持つことはできません。これが許可されていると、Aのすべての保護メンバーまたは内部メンバーに派生クラスからアクセスできるため、Aをパブリックにする効果があります。


    InternalsVisibleToAttributeを使用すると、特定の他のアセンブリで内部型にアクセスできるようにすることができます。

0

私はまた、他の言語でプログラミングしたこの質問に関連して有用であることがC# Default access modifier of Main() method で情報を見つけました。 以下の例から、MyClassは内部で静的void mainはprivateになります。 Peter Talyorが他の言語では異なることを暗示しているので、明示的に示す価値はあると思います。 Visual Studioはプロジェクトに応じて、以下のような初期プログラムのcsファイルを作成します。リンクされたスタックフローの記事で説明したVisual Studioの[表示]タブのクラスビューは、アクセス修飾子のチェックアウトに役立ちます。

namespace MyNamespace{ 
    class MyClass{ 
     static void Main(string[] args){ 
     } 
    } 
} 
1

クラスを他のクラスのプライベートとして宣言できます。以下のコードを参考にしてください。

public class Class1 
    { 
    temp _temp ; 
    public Class1() 
    { 
     _temp = new temp(); 
    }  

    public void SetTempClass(string p_str, int p_Int) 
    { 
     _temp.setVar(p_str, p_Int); 
    } 

    public string GetTempClassStr() 
    { 
     return _temp.GetStr(); 
    } 

    public int GetTempClassInt() 
    { 
     return _temp.GetInt(); 
    } 

    private class temp 
    { 
     string str; 
     int i; 

     public void setVar(string p_str, int p_int) 
     { 
     str = p_str; 
     i = p_int; 
     } 

     public string GetStr() 
     { 
     return str; 
     } 

     public int GetInt() 
     { 
     return i; 
     } 
    } 
    }