2011-06-30 20 views
2

次のコードを削除することはできますか?C#で新しいクラスを作成するときのショートカット

これは私が私のコードで使用するものです。

var _index = new IndexViewModel(); 
_index.PageMeta = new PageMeta(); 
_index.Que = new Q(); 
_Index.Test = new T(); 

これは私のクラス定義である:私は新しいクラスを宣言するときにショートカットがあるかどう覚えしようとしている

public class IndexViewModel { 
    public PageMeta PageMeta { get; set; } 
    public T Test { get; set; } 
    public Q Que { get; set; } 
} 

。 IndexViewModelのコンストラクタに何かを置くことは可能でしょうか?

+0

ヒントをあなたは '新しいIndexViewModel(やるとき'コンストラクタが – V4Vendetta

答えて

5

さて、あなたは、オブジェクト初期化子を使用することができます。shorcutの多くではないかもしれませんが、あなたの反復コードの一部のビットを保存しない

var _index = new IndexViewModel 
{ 
    PageMeta = new PageMeta(), 
    Que = new Q(), 
    Test = new T() 
}; 

。あなたはもう、オブジェクト初期化子を使用する必要はありませんコンストラクタに初期化を追加する場合、コメントに

public class IndexViewModel { 

    // The default constructor now initializes de values: 
    public IndexViewModel() 
    { 
     PageMeta = new PageMeta(); 
     Q = new Q(); 
     T = new T(); 
    } 

    public PageMeta PageMeta { get; set; } 
    public T Test { get; set; } 
    public Q Que { get; set; } 
} 

を質問を明確にする

EDIT:

var _index = new IndexViewModel(); //<- initialized by its own constructor 
+0

おかげと呼ばれています。これをクラスのコンストラクタに入れることはできますか? –

+0

確かに、私はそれを反映するために私のanserを更新しました –

1

私はあなたができると思います:

var _index = new IndexViewModel() 
{ 
    PageMeta = new PageMeta(), 
    Test = new T(), 
    Que = new Q() 
}; 
2

デフォルトでは、これらの新しいオブジェクトのそれぞれを作成し、コンストラクタ:

public class IndexViewModel { 
    public IndexViewModel() { 
     PageMeta = new PageMeta(); 
     Q = new Q(); 
     T = new T(); 
    } 
    public PageMeta PageMeta { get; set; } 
    public T Test { get; set; } 
    public Q Que { get; set; } 
} 

その後、あなたはこれらのオブジェクトのそれぞれの新しいものと新しいIndexViewModelを必要とし、ちょうどあなたが欲しいわけ

new IndexViewModel() 
1

を呼び出しますインスタンスを初期化するためのショートカット、右?もしそうなら:

var _index = new IndexViewModel() 
{ 
    PageMeta = new PageMeta(), 
    Que = new Q(), 
    Test = new T() 
}; 

私はあなたの質問を正しく理解していないと思う。あなたは、この初期化がすべてのインスタンスで発生するようにしたいですか?

public class IndexViewModel 
{ 
    public PageMeta PageMeta { get; set; } 
    public T Test { get; set; } 
    public Q Que { get; set; } 

    public IndexViewModel() 
    { 
     this.PageMeta = new PageMeta(); 
     this.Test = new T(); 
     this.Que = new Q(); 
    } 
} 
+0

ありがとう。これをクラスのコンストラクタに入れることはできますか? –

+0

@JonathanはJaredの答えを見ています。これは、あなたの望むことですか? – yas4891

+0

ありがとうございます。 –

0

C#3.0以降、あなたが行うことができます(と思う)から:)

var _index = new IndexViewModel { 
        PageMeta = new PageMeta(), 
        Que = new Q(), 
        Test = new T() 
}; 
関連する問題