2011-01-14 8 views
18

可能性の重複:
How do you give a C# Auto-Property a default value?自動プロパティ

は自動プロパティのデフォルト値を提供するために、任意の良い方法はありますか?

public int HowHigh { get; set; } // defaults to 0

明示的にどこにも設定されていない場合、私はそれは5.あなたはそれのための簡単な方法を知っていますかになりたいですか?例えば。私はコンストラクタなどで設定できますが、それはエレガントではありません。

UPDATE:C#6はそれを持っている:あなたが行うことができますhttp://geekswithblogs.net/WinAZ/archive/2015/06/30/whatrsquos-new-in-c-6.0-auto-property-initializers.aspx

+0

VB.NETでのみ:PublicプロパティHowHigh As Integer = 42.これはC#の構文が粗いです。 –

+2

私はこれが欲しいです: 'public int HowHigh {get;セット; } = 5; ' –

+2

@ JerryNixon-MSFT:[C#6.0リリース後にとても嬉しいですね](http://www.kunal-chowdhury.com/2014/11/csharp-6-auto-property.html#wQAWULz9VA5JbyLK .97):) – Flater

答えて

11

型の既定値が十分でない場合、それを行う唯一の方法はコンストラクタを使用することです。一言で

10

ベストがコンストラクタでそれを設定されている、あなたは自動プロパティ内で変更を加えることができない、あなたはそれ以外の場合は、自分自身をゲッタリング/バッキングフィールドを必要とセッターを実装します。 - 基本的にあなたが快適ではないコンストラクタ、それを設定する必要が

private int _howHigh = 0; 
public int HowHigh { get {return _howHigh; } set { _howHigh = value; } } 
+0

私はこれが最善の解決策だと信じています –

13

いいえ、これを行うのいずれか良い方法はありません:あなたはこのような何かを書くことができますバッキングフィールドを使用して

このような自動プロパティにはさまざまな制限があります。最も大きな不満は、読み取り専用の自動プロパティを作成する方法がないことです。コンストラクタでは設定できますが、読み取り専用フィールド)。

+0

+1コンストラクタを除いて読み取り専用です。私が実装したい特定のデザインがあれば、それを殺すだろう。 –

+2

C#5でこれに対する新しい属性を提案してもよろしいですか? DefaultValueAttributeは完璧だろう:) –

+2

@Dercsar:私は属性がここに行く方法だとは思わない。私はむしろ言語の変化を見るだろう。結局のところ、それは*言語*統語的な砂糖の一部です。私はC#5でもそれを見ることは間違いありません。 –

3

:いいえ

自動プロパティは、すぐにあなたがバッキングフィールド正規の性質に戻す必要があります(妥当なデフォルト値など)の余分なものを必要として、1つのトリックポニーです。

私はResharperユーザーで、自動的にバックアップされたプロパティからブリーズになります。

2

コンストラクタだけではありません。

私はこれが最善であると信じて:

private int m_HowHigh = 5; 
public int HowHigh { 
    get { return m_HowHigh; } 
    set { m_HowHigh = value; } 
} 

I)は、(ctorのより多くの読みやすさの目的のためにこれを好みます。

これはあなたが望むものではありません:これが唯一の装飾で、(C#4で)値を設定していないのでhttp://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx#Y2248

[DefaultValue(5)] 
public int HowHigh { get; set; } 

リファレンス。

+0

しかし、これは自動プロパティではありません –

+0

その場合、コンストラクタ*はあなたが持っていた唯一の選択肢でした。 –

関連する問題