2009-06-19 7 views

答えて

67

はい、あなたはちょうどそれらのトップレベルのクラスにすることはできません、彼らはこれで結構です内部クラス

public class Outer 
{ 
    protected class Foo 
    { 
    } 
} 

でなければならない、それはFooのを見ることが許可された唯一のクラスは外

class X 
{ 
    // 'Outer.Foo' is inaccessible due to its protection level 
    private void Flibble(Outer.Foo foo) 
    { 
    } 
} 

class X : Outer 
{ 
    // fine 
    private void Flibble(Outer.Foo foo) 
    { 
    } 
} 
のサブクラスであることを意味し

外部レベルクラスのアクセス修飾子は、他のアセンブリとの関連での可視性を定義するため、C#では外部クラスをprivate、protected(またはprotected internal)として宣言することはできません。アセンブリ内でのみ(またはInternalsVisibleToを介して)友人に表示されるか、アセンブリの外側に表示されます。

内部/公開識別子は、一貫性のために、ここで使用されている間、このように実際にILでの状態は、単に(Reflection.Emit flags showなど)「公開」または「非公開」

+0

+1明確な例です。 –

11

protected可視性「が派生クラスからは見え示すために使用されています'これはクラス内のものには意味がありますが、通常はクラスレベルでは意味がありません。

唯一の例外は内部クラスです。保護された可視性は、派生クラスが内部クラスにアクセスできることを意味します。

3

はい、私たちはそれらをトップレベルのクラスにすることはできません。内部クラスでなければなりません。