ゲッターメソッドとセッターメソッドがプライベートであると宣言されたコードを見ました。私はそれの背後にある論理を理解しようとしています。なぜあなたはそれらを非公開と宣言しますか?これはゲッターやセッターを通して達成しようとしていることとまったく逆です。なぜゲッターとセッターメソッドをプライベートと宣言しますか?
答えて
私はいくつかの理由を考えることができます:
- あなたは将来の公共のアクセスを防止します。
異なるプログラマがコードを見て変数にアクセスしたいが、セッターとゲッターがない場合、彼はあなたがちょっと忘れてしまったと思うかもしれません。しかし、private
と宣言した場合は、と言っています。これらの変数を外部から変更またはアクセスしないようにします。
- あなたが設定し、他のアクション
となっ関連付けるあなたがpublic
アクセサをしたくないと言います。しかし、プライベート変数が何回変更されたかを知りたいかもしれません。変数にアクセスするたびにカウントをインクリメントするのではなく、セッターを使用する方が簡単です。
- あなたは再び中央アクセスポイント
をしたい、あなたはpublic
アクセスを必要はありませんが、デバッグ中に、あなたはprivate
メンバーが変更されたすべての場所にブレークポイントを置きたいかもしれません。そのため、クラス内のどこにでもブレークポイントを設定するのではなく、アクセッサにブレークポイントを設定するだけです。
ゲッターとセッターで達成しようとしていることとまったく同じです。
実際にはありません。 getterとsetterを宣言する理由は、フィールドを非表示にするためです。これは、不要な結合を避けるために行われます。すなわち、APIの実装の詳細に応じてAPIのクライアントである。 (そのカップリングは、いくつかの理由で問題になる可能性があります。)プライベートゲッターとセッターを作る理由は、オブジェクトの抽象状態の対応する部分をプライベートにすることです。それは、ゲッターとセッターを使用するかどうかを決定するのに、がほとんど独立しているです。
getterとsetterを使用するケースはプライベート状態ほど強力ではありませんが、まだ具体的なメリットがあります。例:
ゲッター/セッターメソッドは、余分な動作またはエラーチェックコードを追加する場所を提供します。
また、デバッグコードを追加したり、テストコードを注入する場所(ユニットテスト用)を提供します。
ゲッターとセッターはオーバーライドできます。あなたはフィールド(プライベートかどうか)でそれをすることはできません。
- 1. MyEclipseのゲッター/セッターメソッド
- 2. C#のゲッター、セッター宣言
- 3. なぜ一般的なリストをnullableとして宣言しますか?
- 4. AppDelegateで宣言されたNSStringのセッターとゲッター
- 5. Scala:コンパイル時にゲッターとセッターを生成しないパブリックフィールドを宣言できますか?
- 6. プライベート変数を参照するとき、this.variableName宣言が必要ですか?
- 7. クラス属性宣言:プライベートvs公開
- 8. Javaインターフェイスメソッドを抽象として宣言するのはなぜですか?
- 9. C#BestPractice:プライベートvarと公共ゲッター/セッターまたは公共ヴァール
- 10. 宣言とPerl
- 11. なぜWebMethodがStaticとして宣言されたのですか?
- 12. 宣言と宣言の順序
- 13. クラス宣言とインスタンス宣言の型キーワード
- 14. C++クラスとメソッドを宣言し、メンバーは宣言していないヘッダーファイル?
- 15. C#:関数がnullを返すことはないと宣言しますか?
- 16. Switch宣言で型宣言を行うことはできますか?
- 17. オブジェクトとして値を宣言しますか? C#ので
- 18. 変数をdbo.Nameとして宣言しますか?
- 19. はfstreamオブジェクトを宣言できませんか?それをポインタとして宣言できますか?
- 20. フォワード宣言とデストラクタ
- 21. フォワード宣言とshared_ptr
- 22. Pythonとグローバル宣言
- 23. エラー:C関数の宣言が前の宣言と矛盾しています
- 24. シェルコードをchar []配列として宣言するときとchar *を宣言するときの違いは?
- 25. 変数の宣言と宣言の間に違いはありますか?
- 26. argv []がconstとして宣言されているのはなぜですか? ARGV [] CONSTとして宣言された理由のObjective-Cでは、
- 27. Xcodeはいつ転送メソッドの宣言を必要としないのですか?なぜですか?
- 28. ポインタを構造体として宣言できますか?
- 29. Ext.Componentをグローバル変数として宣言できますか?
- 30. セッターメソッドで$ thisを返すのはなぜですか?