自動実装のゲッターとセッター vs. パブリックフィールド
2023-08-04 09:19:18
質問
C#のクラスでこれを行うサンプルコードをよく見かけます。
public class Point {
public int x { get; set; }
public int y { get; set; }
}
あるいは、古いコードでは、明示的なプライベートなバッキング値で、新しい自動実装のプロパティを使用せずに、同じことを行います。
public class Point {
private int _x;
private int _y;
public int x {
get { return _x; }
set { _x = value; }
}
public int y {
get { return _y; }
set { _y = value; }
}
}
私の質問はその理由です。上記のようにすることと、以下のようにこれらのメンバーをパブリックフィールドにするだけとでは、機能的に何か違いがあるのでしょうか?
public class Point {
public int x;
public int y;
}
はっきり言って、基礎となるデータの変換を行う必要がある場合、ゲッターとセッターの価値を理解しています。しかし、単に値を渡すだけのケースでは、不必要に冗長になるように思えます。
どのように解決するのですか?
私は (不必要に冗長であると思われることに) 同意する傾向がありますが、これは私たちのチームがまだ解決していない問題であるため、私たちのコーディング標準では、すべてのクラスに対して冗長なプロパティをまだ要求しています。
ジェフ アトウッド は数年前にこの件を扱いました。 彼が振り返って指摘した最も重要な点は、フィールドからプロパティに変更することは を破壊する変更であるということです。 それを消費するものはすべて、新しいクラス インターフェースで動作するように再コンパイルする必要があります。したがって、自分のコントロール外のものが自分のクラスを消費している場合、問題が発生する可能性があります。
関連
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] パブリック、プライベート、プロテクトの違いは何ですか?
-
[解決済み] プロパティとゲッターとセッターの使い分け
-
[解決済み] パブリックフィールドとオートマチックプロパティ
-
[解決済み】C#でprivateプロパティを使用する理由はあるのでしょうか?
-
[解決済み] ゲッター、セッター、プロパティのベストプラクティス。JavaとC#の比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する