問題タブ [getter-setter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ゲッター、セッター、およびプロパティのベスト プラクティス。Java と C#
私は現在 C# のクラスを受講しており、最善の方法を見つけようとしています。私は Java のバックグラウンドを持っているので、Java のベスト プラクティスしか知りません。私はC#初心者です!
Java では、プライベート プロパティがある場合、これを行います。
C# では、これを行う方法がたくさんあることがわかります。
私はJavaのようにそれを行うことができます:
または、次のようにすることもできます。
または:
どちらを使用する必要があり、各アプローチに関連する注意事項や微妙な点は何ですか? クラスを作成するときは、Java から知っている一般的なベスト プラクティスに従っています (特に、Effective Java を読んでいます)。たとえば、私は不変性を支持しています (必要な場合にのみセッターを提供します)。これらのプラクティスが、C# でセッターとゲッターを提供するさまざまな方法にどのように適合するかを知りたいだけです。基本的に、Java の世界のベスト プラクティスを C# に変換するにはどうすればよいでしょうか?
編集
これをJon Skeetの回答へのコメントとして投稿していましたが、長くなりました:
自明ではないプロパティ (つまり、重要な処理と検証を伴うもの) はどうですか? パブリック プロパティを介して公開できますが、ロジックはget
andにカプセル化されていset
ますか? 専用のセッターとゲッターメソッド(関連する処理と検証ロジックを使用)を使用して、これを行う必要があるのはなぜですか。
php - 単体テスト アクセサー (ゲッターとセッター)
次の方法があるとします。
将来、より複雑なものに変更される可能性があると仮定します。
- これらのメソッドの単体テストをどのように記述しますか?
- テスト方法は 1 つだけですか?
- それらのテストをスキップする必要がありますか?
- コードカバレッジはどうですか?
@covers
注釈はどうですか?- 抽象的なテストケースに実装する普遍的なテストメソッドでしょうか?
(私は Netbeans 7 を使用しています)
これは時間の無駄のように思えますが、IDE がこれらのテスト メソッドを自動的に生成するかどうかは気にしません。
Sebastian Bergman のブログのコメントから引用するには:
(ゲッターとセッターをテストするようなものです -- 失敗します!)。いずれにせよ、失敗した場合。それらに依存するメソッドは失敗しませんか?
では、コード カバレッジはどうでしょうか。
iphone - Objective-C のクラスを介して変数にアクセスする
私のプロジェクトでは、最初のビューはログ ビューです。たとえば、ユーザー名を他のクラスに取得したいと考えています。他のクラスでそれを取得する方法がよくわかりません.stackoverflowで検索しましたが見つかりませんでした(いくつか試しましたがうまくいきませんでした).
login.h
login.m
ホーム.m
接続されているクライアントに関する情報を表示するために、すべてのプロジェクトでこの値が必要になります。
作業できるヒントまたはサンプル コードが必要です。
編集:与えられたアドバイスに従ってコードを変更しました。何か見逃した場合は教えてください
c# - C# のゲッターとセッターの省略形
この行の内部動作に関する私の理解が正しい場合:
次に、舞台裏でこれを行います。
私が本当に必要なのは:
しかし、私はそれを次のように書きたいと思います:
これは機能しません。問題は、IsDirty を実行する必要があるオブジェクトのいくつかには多数のプロパティがあり、自動ゲッター/セッターを使用する方法があることを望んでいますが、フィールドが変更されたときに IsDirty を設定します。
これは可能ですか、それとも自分のクラスのコード量を 3 倍にすることを諦めなければなりませんか?
iphone - CGFloats、フロートがゼロに設定される
カスタム クラス Custom.mm があり、コントローラー クラス MainController でセッターを使用して float 値を設定しようとしています。Custom インスタンスは、Obj-C++ ファイルであり、コンパイル時に適切なクラスを指しているため、id として型指定されています。すべて正常に動作し、インスタンスが検証されました。amount 変数を int 型として設定し、int を渡すと、正常に動作します。フロートを除く、他の値またはオブジェクトと同じです。Custom.mm クラスでは、何らかの理由で float (float、CGFloat など) が 0 に設定されています。これは NSLog などの問題ではありません。ブレークポイントを使用して amount 変数をチェックしたところ、すべてが動作しましたが、フロートしました。
java - Javaカプセル化の概念と混同
良い一日!
カプセル化に関する Java の本を読んでいて、getter メソッドと setter メソッドについて言及されています。
属性を非表示にするには、インスタンス変数を「PRIVATE」としてマークし、データにアクセスするための「PUBLIC」メソッドを作成する必要があることを読みました。getter and setter
そこで、次のように、従来のコードではなく、同様のコードを作成してみました。
上記のコードは、変数を直接割り当てたために変数を公開していますか? どうすればこれを改善できますか?代わりに従来のgetter and setter
メソッドを作成し、他のクラスに値を割り当てた方がよいでしょうか? 「データを隠す」とはどういう意味ですか?
ありがとうございました。
scala - Scala コンストラクター、名前付き引数、および暗黙のゲッター/セッター
Scala コンストラクターで名前付き引数を使用し、後でコンストラクター インターフェイスを壊したり、コードを非常に醜くしたりすることなく、getter と setter をオーバーライドすることは可能ですか?
次のスカラ コードを見てください。
素敵できれい。これにより、次のように使用できる person という単純なクラスが作成されます。
後で、FirstName セッターに検証を追加することにしました。そのため、新しいプライベート ローカル変数を作成し、ゲッター メソッドとセッター メソッドをオーバーライドします。
まだある程度きれいですが、これを行うには、コンストラクターの引数名を変更する必要があり、外部インターフェイスが壊れます。
私が思いついたこの問題の最初の解決策は
これはいくぶん醜くエレガントではなく、私が最初に scala を使用していた理由のほとんどを取り除いてしまいます。
これを行うより良い方法はありますか?
tl;drコードを醜くしたり、パブリックインターフェイスを変更したりせずに、デフォルトのコンストラクターで定義されたメンバーのゲッター/セッターをオーバーライドする方法は?
java - 多くのゲッターとセッターを持つことは良い考えですか?
オープンソースにする予定のアプリケーションを (Java で) 作成する場合、多くのゲッターとセッターを用意し、変数を非公開にするのは一般的に良い考えですか? より具体的には、それがAndroid アプリケーションである場合、上記の質問に対する答えは依然として有効でしょうか?
編集:なぜその方が良いのかについて具体的な理由を教えていただければ、それは素晴らしいことです.
java - getterから返されたコレクションを変更できないのはなぜですか?
プライベートフィールドリストを返すゲッターを持つクラスがあります。
ただし、getterメソッドの呼び出し元は、そのリストに要素を追加したり、そのリストから要素を削除したりすることはできません。
UnsupportedOperationExceptionがスローされました。
getterがそのリストへの参照を返すことは知っていますが、呼び出し側でそのリストが読み取り専用であるのはなぜですか?ゲッターでCollections.unmodizableList()を返さなかったことに注意してください。
アップデート:
申し訳ありませんが、Arrays.asListによって修正サイズのリストを作成しました。その理由は;)
java - ゲッターとセッター、スレッド化と Java
学校では、Java でゲッターとセッターを使用するように教えられました。最近、私はそのようなことは悪いことであり、OOP ではないことを読んでいます。わかりましたので、コンストラクターを使用してデータを設定し、必要なデータを返すだけのコードを作成できます。
スレッドでゲッターを使用しない方法は? スレッドを実行すると、そのタイプは常に void であり、 java にはグローバル変数があります。. .. では、ゲッター メソッドを使用せずにスレッドからデータを取得するにはどうすればよいでしょうか。