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