[解決済み】C#のオートプロパティの初期化【重複あり
2022-04-09 07:33:05
質問
こういう授業は書き慣れたものです。
public class foo {
private string mBar = "bar";
public string Bar {
get { return mBar; }
set { mBar = value; }
}
//... other methods, no constructor ...
}
Barをオートプロパティに変換するのは便利で簡潔なようですが、コンストラクタを追加してそこに初期化を入れずに初期化を保持するにはどうしたらよいでしょうか。
public class foo2theRevengeOfFoo {
//private string mBar = "bar";
public string Bar { get; set; }
//... other methods, no constructor ...
//behavior has changed.
}
コンストラクタを追加することは、オートプロパティによって得られるはずの労力の節約と一致しないことがおわかりいただけたと思います。
こんな感じなら、もっと理にかなっていると思います。
public string Bar { get; set; } = "bar";
解決方法は?
更新 - 以下の回答は、C# 6が登場する前に書かれたものです。C# 6では、以下のように書くことができます。
public class Foo
{
public string Bar { get; set; } = "bar";
}
あなたは また これはコンストラクタでのみ書き込み可能です (ただし、デフォルトの初期値を設定することもできます)。
public class Foo
{
public string Bar { get; }
public Foo(string bar)
{
Bar = bar;
}
}
今はその方法がないのが残念です。コンストラクタで値を設定する必要があります。(コンストラクタのチェーニングを利用すると重複を避けることができます)。
自動的に実装されるプロパティは、今は便利ですが、もっと素敵になるはずです。この種の初期化は、コンストラクタで設定できる読み取り専用の自動実装プロパティほど頻繁には必要ないと思いますし、読み取り専用のフィールドでバックアップされるでしょう。
C# 5までは実現されていませんでしたが、C# 6では計画されています。宣言の時点で初期化を可能にするという点では、どちらも同じです。 と 読み取り専用で自動実装されたプロパティをコンストラクタ本体で初期化できるようにする。
関連
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] パブリックフィールドとオートマチックプロパティ
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?