.NET の「保護された」修飾子と「保護された内部」修飾子の違いは何ですか?
4 に答える
プライベート
アクセスは特定のタイプ内からのみ許可されます
保護された
プライベート アクセスが拡張され、継承型が含まれるようになりました
内部
プライベート アクセスが拡張され、同じアセンブリ内の他の型が含まれるようになりました
したがって、次のようになります。
保護された内部
プライベート アクセスが拡張され、この型から継承するか、この型と同じアセンブリ内にある型、またはその両方にアクセスできるようになります。
基本的に、すべてをprivate最初に考えてください。
protected
メンバーは、継承する型にのみ表示されます。
protected internal
メンバーは、継承する型と、宣言する型と同じアセンブリ内に含まれるすべての型に対してのみ表示されます。
C# の例を次に示します。
class Program
{
static void Main()
{
Foo foo = new Foo();
// Notice I can call this method here because
// the Foo type is within the same assembly
// and the method is marked as "protected internal".
foo.ProtectedInternalMethod();
// The line below does not compile because
// I cannot access a "protected" method.
foo.ProtectedMethod();
}
}
class Foo
{
// This method is only visible to any type
// that inherits from "Foo"
protected void ProtectedMethod() { }
// This method is visible to any type that inherits
// from "Foo" as well as all other types compiled in
// this assembly (notably "Program" above).
protected internal void ProtectedInternalMethod() { }
}
いつものように、Fabulous Eric Lippert のブログ投稿の1 つから:
protected internal[ ] は、「このアセンブリにあるすべての派生クラスが M にアクセスできる」ことを意味すると多くの人が信じています。そうではありません。実際には、「M は、このアセンブリ内のすべての派生クラスとすべてのクラスからアクセスできる」ことを意味します。 つまり、制限の厳しい組み合わせではなく、制限の少ない組み合わせです。これは多くの人にとって直感に反することです。私はその理由を理解しようとしてきました、そして私はそれを手に入れたと思います。
internal、protected、およびprivateは、 の「自然な」状態からの制約として認識されていると思いますpublic。そのモデルでは、protected internal「保護された制限と内部制限の両方を適用する」ことを意味します。それはそれについて考える間違った方法です。むしろ、
internal、protectedおよびpublicは、 の「自然な」状態の弱体化ですprivate。privateC# のデフォルトです。何かをより広くアクセスできるようにしたい場合は、そう言わなければなりません。そのモデルでprotected internalは、どちらか単独よりも弱い制限であることが明らかになります。
protectedとprotected internallemmeの違いについて簡単な例を挙げてください。私はその例に一致します...
Country A: 1 つのアセンブリ
Country B: 別の別のアセンブリ
X(基本クラス) はYA 国で (継承されたクラス)のお父さんです
Z(の継承されたクラス)は、B国Xの別の息子です.X
Xプロパティを持っています。
Xが次のようにプロパティに言及しているprotected場合 :X私のすべての息子YとZ, あなたがどこにいても私のプロパティにアクセスできるのはあなただけです...神のご加護がありますように. あなた以外の誰も私の財産にアクセスできません。Xプロパティについて次のように言及しているprotected internal場合 :私の息子を含む私Xの国のすべての人々は、私のプロパティにアクセスできます。親愛なる息子よ、あなたはまだ私の財産にアクセスできます.AYZCountry B
皆さんが理解してくれることを願っています...
ありがとうございました。