クラスを .NET で保護できますか?
これが可能である/不可能である理由は何ですか?
36155 次
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 に答える