私はバグだったと思ったのは実際にはThis postで詳述された機能です。誰が私になぜこれが許されるのか説明できますか?それは有用となった伝統的な奇妙な/バグのようです。プライベートセッターでプロパティのSetValueへのリフレクションを使用
2
A
答えて
6
私はバグだとは思っていませんが、コンパイル時にリフレクションを介してクラスの内部にアクセスすることは常に可能でした。これは設計によるものです。 CLRの多くの側面は、シリアル化などのフィールドにアクセスするためのリフレクションに依存しています。コンパイルされたILはすべてのオブジェクトのすべてのフィールドにアクセスできる必要があります。そうしないと、プライベートフィールドをからに設定できませんでした。
C#のアクセス修飾子はセキュリティメカニズムではありません。誰かが外部からそれを設定するのを防ぐためにプライベートなフィールドに頼っているのであれば、あなたは何か間違っているのです。あなたのクラスのどの部分が、実装の詳細である(したがって、予告なしに変更することができる)公的な契約である(したがって、理論上は安定している)ことを明確に描写しています。
リフレクションを使用する場合オブジェクトの内部状態を変更してください。アプリケーションの安定性を自分の手に取っていて、価値があるものが得られます。
0
リフレクションはフルトラストコードに対してのみ許可されているので、コードはすでに何かを行うことができます(プロセスのメモリに直接ポンピングするなど)。したがって、プライベートプロパティでも値を変更する方法をサポートしていても、コードの安全性は低下しません。リフレクションAPIの一貫性を保ち、特にテストのための有用なシナリオを可能にします。
関連する問題
- 1. リフレクションを使用したプロパティの取得
- 2. C++/CXプロパティのプライベートセッターは何ですか?
- 3. JavaリフレクションでのScalaリフレクションの使用
- 4. リフレクションを使用して一部のプロパティを選択する
- 5. PHPリフレクションを使用してプロパティのデフォルト値を取得する
- 6. リフレクションとextesnionメソッドを使用してオブジェクト間のプロパティをコピー
- 7. プライベートセッターを使用したAutoMapperマッピングプロパティ
- 8. プロパティ/メソッドのインライン化とリフレクションへの影響
- 9. スウィフト3リフレクション - プロパティの反復
- 10. パブリックゲッターとプライベートセッターでプロパティを作成できますか?
- 11. Zend-FormでsetValueを使用する
- 12. 内部プライベートクラスのテストメソッドへのリフレクションの使用
- 13. ビュー内のリフレクションを使用
- 14. リフレクションを使用した型パラメータへのアクセス
- 15. 配列のSetValueメソッドと[]インデクサの使用
- 16. リフレクションを使用してIListプロパティを更新する方法
- 17. C#ポータブルクラスライブラリとネストされたプロパティを使用したリフレクション
- 18. EFCoreプライベートセッターによるベースエンティティモデルのプロパティ - マイグレーションの奇妙な動作
- 19. C#Debug Visualizerリフレクション:リフレクションを使用して複合オブジェクトに含まれるプロパティの値を取得
- 20. プライベートセッターtypescript?
- 21. リフレクションでのコンテキストとインテントの使用
- 22. JavaからSwiftへのリフレクション
- 23. プライベートセッターのPowerMokito doNothing()NullPointer
- 24. Objective-CのARC読み取り専用プロパティと前ARCにプライベートセッター実装
- 25. リストをソートするリフレクションgetオブジェクトのプロパティ
- 26. AutomapperはプライベートセッターOOBを使用する予定ですか?
- 27. リフレクションでプロパティを組み込む
- 28. SimpleStringProperty setValue()とsetValue()
- 29. ジェネリック型オブジェクトのリフレクションを使用してプロパティを取得します
- 30. リフレクションを使用して継承プロパティの値を取得する方法は?
私はそれがセキュリティの仕組みではないとは確信していません。部分的に信頼できるコードが他のタイプのプライベートメンバーにアクセスできない理由があります。 – svick
良い答え.... – MarkP