37

クラスを .NET で保護できますか?
これが可能である/不可能である理由は何ですか?

4

4 に答える 4

76

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

public class Outer
{
    protected class Foo
    {
    }
}

これは問題ありません。つまり、Foo を参照できる唯一のクラスは、Outer のサブクラスです。

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# では外部クラスをプライベート、保護 (または保護内部) として宣言できないことに注意してください。アセンブリ内のみ (または InternalsVisibleTo を介して友人に) またはアセンブリの外部で明確に表示されます。

したがって、ここでは一貫性のためにパブリック/内部識別子が使用されていますが、実際には IL の状態は単純に「パブリック」または「非パブリック」です ( Reflection.Emit フラグが示すように) 。

于 2009-06-19T12:53:02.910 に答える
12

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

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

于 2009-06-19T12:53:14.173 に答える