2

みなさんご存じのとおり

のデフォルト修飾子

  • クラス
  • 構造体
  • 委任
  • インターフェース
  • 列挙型

内部です。

  1. 列挙型とインターフェイスのメンバーは、デフォルトではpublicです。

  2. また、Class、Struct、Delegateメンバーは、デフォルトではプライベートです。

  3. 同じクラスライブラリの非派生クラスは、パブリッククラスと内部クラス(およびパブリック、内部、保護された内部メンバー)にアクセスできます。

  4. 異なるクラスライブラリの非派生クラスは、パブリッククラスにアクセスできます(パブリックメンバーのみ)。

  5. 異なるクラスライブラリの派生クラスは、パブリッククラス(パブリック、保護、保護された内部メンバー)にアクセスできます。

今、私はなぜそうなのかというコアコンセプトを理解したいと思います...

保護されたメンバーは、内部よりも多くのスコープを持っていますか?

4

5 に答える 5

2

ドキュメントから:

保護された

型またはメンバーは、同じクラスまたは構造体、またはそのクラスから派生したクラス内のコードによってのみアクセスできます。

内部

型またはメンバーは、同じアセンブリ内の任意のコードからアクセスできますが、別のアセンブリからはアクセスできません。

保護された内部

型またはメンバーには、それが宣言されているアセンブリ内の任意のコードから、または別のアセンブリ内の派生クラス内からアクセスできます。別のアセンブリからのアクセスは、保護された内部要素が宣言されているクラスから派生したクラス宣言内で行う必要があり、派生クラス型のインスタンスを介して行う必要があります。

于 2012-10-25T07:17:15.173 に答える
2

4) 異なるクラス ライブラリの非派生クラスは、パブリック クラス (パブリック、保護、保護された内部メンバー) にアクセスできます。

これは正しくありません。

4) 異なるクラス ライブラリの非派生クラスは、パブリック クラスにアクセスできます (パブリック メンバーのみ)。

そして、それは実際の質問も議論の余地があることを意味します:

なぜそうなのか...保護されたメンバーは内部よりも多くのスコープを持っていますか?

protected異なるスコープをinternal持っています。どちらが「大きい」かは難しい。このようにそれらを比較することは、まったく役に立ちません。

于 2012-10-25T07:25:56.017 に答える
0

保護されているとは、このメンバーまたはメソッドを派生クラスでオーバーライドできないことを意味します。それ以外の場合は、パブリックメンバー/メソッドのように動作します。

于 2012-10-25T07:14:46.607 に答える
0

なぜそうなのか...保護されたメンバーは内部よりも多くのスコープを持っていますか?

protectedアセンブリ間でアクセス可能なメンバーを持つことができますが、 internal.

internal内部メンバーは、同じアセンブリ内のファイル内でのみアクセスできます。その範囲はアセンブリのみに限定されます。

protectedアセンブリの外からアクセスできます。保護されたメンバーは、それが宣言されているクラス内から、およびこのメンバーを宣言したクラスから派生した任意のクラス内からアクセスできます。この派生クラスは、アセンブリの外にある場合があります。

internalしたがって、修飾子よりもスコープがあります。

于 2012-10-25T07:15:13.520 に答える
0

内部メンバーはエクスポート用に宣言されていないため、それらの dll であるモジュールの外に表示されません。

于 2012-10-25T07:16:29.883 に答える