1

C#にプロジェクトがあり、2つの名前空間が別々のファイルで定義されており、一方が他方のサブセットです。

namespace RSSTimerJob

namespace RSSTimerJob.Features.RSSFilter

Toolbox1番目の名前空間に属するという静的クラスがあります。Toolbox2番目の名前空間のカスタムクラスからクラスの保護された静的変数を呼び出そうとすると、保護レベルが原因でアクセスできないというエラーが表示されます。

なぜこのエラーが発生するのですか。2番目の名前空間は1番目のサブセットであるため、変数を保護することで、2番目の名前空間のクラスがそれを認識できるようになるという意味ではありませんか?

もちろん、変数をpublicに設定すると、このエラーはなくなりますが、興味があります:)

4

3 に答える 3

2

protected使用したいキーワードではありません。

internal同じアセンブリ内の他のクラスへのクラスのメンバーへのアクセスを許可します。

C#では、protectedベースメンバーからそのベースから派生したクラスへのアクセスを許可します。同じパッケージ内のサブクラスとクラスへのアクセスを許可するという点で、わずかに異なるJavaについて考えているかもしれませんprotectedC#でほぼ同じ動作を得るには、とを含む組み合わせを使用して、protected internal派生クラスへのアクセス同じアセンブリ内のクラスへのアクセスを許可します。protectedinternal

于 2011-12-23T18:04:18.693 に答える
0

protectedモノがクラス自体と派生クラスで利用できることを意味します。

しかし、私は名前空間で凶暴になることはありません。あなたがそれらに入れるものがたくさんあり、これらのものが十分に異なっている場合、それらは役に立ちます。名前空間のベストプラクティスに関するガイドラインを次に示します。

于 2011-12-23T18:05:01.273 に答える
0

「保護された」とは、そのメンバーが同じクラスまたは派生クラスからアクセスできることを意味します。ただし、同じ名前空間の他のメンバーがそのメンバーにアクセスすることはできません。

探しているのはおそらく「内部」です。つまり、同じアセンブリ内のコードでメンバーにアクセスできます。

ちなみに、別のアセンブリから同じ名前空間にさらにメンバーを追加できます。

于 2011-12-23T18:05:02.767 に答える