2009-07-03 10 views
11

は(C#の構文のために作られた変更で)ブロッホのビルダーパターンの逐語的なコピーを考慮していませんBuilderのプライベートプロパティにアクセスする権限がありません。しかし、Javaでは、これを行うことができます。ネストされたクラスのプライベートプロパティにアクセスできないようにするC#のルールは何ですか?はなぜC#でブロッホのBuilderパターンの仕事は

(私は人々が代替hereを与えてくれたことを実感しています。それは素晴らしいことです。私が興味を持っているのは、修正なしでJavaパターンを使用できない理由です)。

+0

こんにちは、私はこの正確な質問をしました。かなり良い回答があります。ここで私たちは行く[http://stackoverflow.com/questions/512651/how-is-javas-notion-of-static-different-from-cs](http://stackoverflow.com/questions/512651/how-is -javas-static-different-from-cs) – uriDium

答えて

18

内部クラス/ネストされたクラスのJavaプライベートメンバーは、そのクラスを含むクラスからアクセスできます。 C#ではそうではありません。

+1

コンパイラは、適切なアクセス許可を持つ合成アクセサを生成することでこれを可能にします。古いスレッドを復活させて申し訳ありません... – Jonathan

+0

@Jonathan:そうです。これは、JVMがネストされたクラスについて実際にはわかっていないという事実と関係しているので、望ましいメソッドを得るために合成メソッドが必要です。私の印象は、質問はJava言語であり、JVMではないということでした。 –

+1

正確に。私は、将来誰かがこれを見つけた場合に備えて、より多くの情報を提供しようとしていました。 – Jonathan

3

なぜコンパイルが許可されるべきか分かりません。あなたはそのクラスの外からクラスのプライベートフィールドにアクセスしようとしています。ただし、Javaには、外部クラスからのアクセスを可能にするネストされたクラスの特別なルールが含まれています。次のようにC#で

2

アクセシビリティレベルは次のとおりです。

  • 公共:アクセスが制限されていません。
  • protected:アクセスは、含まれているクラスから派生した1つ以上のクラスに限定されます。
  • internal:アクセスは現在のアセンブリに限定されています。
  • protected internal:アクセスは、現在のアセンブリまたは包含クラスから派生した型に限定されます。
  • プライベート:アクセスは含むタイプに制限されています。

ネストされたクラスのC#では特別なケースはありません。その結果、そのクラスの外部またはそのクラスから派生するクラスからプライベートメンバーにアクセスすることはできません。

あなたは従うMSDNの記事でより多くの情報を見つけることができます。ネストされたクラスの陰部にできるように、外側のクラスへのアクセスは、「オブジェクト指向言語の型システムの包摂ルール」を破ることAccessibility Levels (C#)

+0

私の理解では、C#ネストされたクラスのための特殊なケースがあります。彼らは囲みタイプの秘密にアクセスすることができます。 –

0

ギラッド・ブラチャargues

関連する問題