C#のネストされた型は、親のプライベートプロパティにアクセスできます。この言語機能を持つ特別な理由はありますか?私の意見では、これはカプセル化を破る。ネストされた型をパブリックにすると、それを介して親クラスのプライベートプロパティを公開することができます。C#のネストされた型による親のプライベートプロパティへのアクセス
5
A
答えて
6
でも可能ですが、最初に外側のクラスと同じソースファイルに入れておけばそのクラスをネストできます。
ネストされたクラスは、外部クラスによって「所有」され、外部クラスの他のメンバーと同じエクステントに信頼されます。外部クラスのメソッドはプライベートプロパティも公開する可能性がありますが、あなたはそのコードをすべて所有しているので、そうではないと信じています。同様に、あなた(外部クラスの作成者)はネストされたクラスのすべてのコードを所有しています。ネストされたクラスでカプセル化を中断したくない場合は、カプセル化を破るコードを書くのは避けてください:)
5
ネストされたクラスはメソッドと同じように、囲むクラスの一部です。それらを介してプライベートプロパティを公開しても、メソッドを介してプライベートプロパティを公開するよりも、カプセル化が破られることはありません。
C#がアクセス制御に使用するモデルは、を定義するクラス内のにアクセスでき、それが他の方法でどのように動作するかを確認するのが難しいです。
2
(IMO)ネストされたタイプは、囲みタイプの一部であるため、そのタイプの他の部分と同様に、private
メンバーにアクセスする必要があります。
タイプpublic
の他の部分を作成した場合と同様に、タイプのプライベートプロパティが公開される可能性があります。
囲みタイプを書いた人だけが入れ子タイプを書くことができるので、実際のリスクはありませんか?
関連する問題
- 1. C++ネストされたクラスへのアクセス
- 2. アンダーリスト内のネストされた子内の親liへのアクセス
- 3. 親モデルのネストされた子属性へのアクセス?
- 4. Rails:ネストされたモデルバリデーションの親モデル属性へのアクセス
- 5. 子クラスのプライベートプロパティへのアクセス
- 6. Objective-C:継承されたクラスのプライベートプロパティにアクセス
- 7. C#(親子リスト)のネストされたリスト
- 8. ネストされたコンポーネントの状態へのアクセスへのアクセス
- 9. C#のネストされたイベントログにアクセス
- 10. フェッチ呼び出しのネストによるネストされたデータへのアクセス方法
- 11. PanelBars /ネストされたコントロールへのアクセスMVC
- 12. ネストされたフォームデータレールへのアクセス4
- 13. ネストされた値へのアクセス
- 14. CloudFormation - 子ネストされたスタック内の親スタックの出力へのアクセス
- 15. ネストされたリピーターの親データにHeaderTemplateでアクセスする
- 16. C++テンプレート演算子のオーバーロードとプライベートプロパティへのアクセス
- 17. 角型 - テンプレート内のネストされたコントロールにアクセスする
- 18. EFコアネストされたネストされたエンティティへのアクセス
- 19. Objective-Cで、プライベートプロパティにアクセスする方法
- 20. 親フォームタイプのクラスは、子のプライベートプロパティにアクセスできない
- 21. C#reportviewerのネストされたリストのデータにアクセスするには?
- 22. C#:リフレクションによる継承されたプライベートインスタンスメンバへのアクセス
- 23. ネストされたモデルフォーム。親/ルートFormBuilderにアクセスするには?
- 24. PHP:ドット表記によるネストされたオブジェクトのプロパティへのアクセス
- 25. 親と子のネストされた辞書へのリスト
- 26. 春@親のコンテキストにロードされたプロパティへの@Valueアクセス
- 27. スライダの親指に配置されたテキストブロックへのアクセス
- 28. C++によるデータ型のビットへの選択的アクセス
- 29. ネストされた内部クラス:ネストされたクラスタイプの変数を公開して親メソッドにアクセスする
- 30. Javaがリフレクションによるプライベートプロパティにアクセス
不適切なデザインには無限の可能性があります。何もあなたがそれらを使用するように強制しません。 –