2016-10-21 4 views
-4

これは、コードスニペットをインスタンスフィールド変数

public class CartItemList 
{ 
    //internal list of items and the constructor that instantiates it 
    private List<CartItem> **cartItems**; 
    public CartItemList() { 
     cartItems = new List<CartItem>(); 

ではCartItemList()コンストラクタは、それをインスタンス化する前cartItemsリストのコンストラクタを起動することが可能ですか?それから単にCartItemListのデフォルトのコンストラクタを使用しますか?このよう

public class CartItemList 
{ 
    //internal list of items and the constructor that instantiates it 
    private List<CartItem> cartItems= new List<CartItem>(); 
    public CartItemList() 
+2

どうしたのですか?このコードを実行しようとしましたか? –

+1

この*は* Javascriptではないので、実行可能なJavascriptコードスニペットとしてタグ付けしないでください。 (私はこれらのタグを削除してコードをフォーマットするための質問を編集しました) –

+0

@JonSkeetコメントありがとうございました – mybirthname

答えて

2

はい、class(参照型)は、そのようなフィールドの初期化子を有することができます。フィールド初期化子はインスタンスコンストラクタの前で実行されます。

インスタンスコンストラクタを自分で作成していない場合(およびそのクラスが静的でない場合)、C#コンパイラによって作成されます。 public(またはabstractクラスの場合はprotected)になり、引数はゼロになります。


それだけ初期化子から、インスタンスコンストラクタからに割り当てられる場合は、readonlyとしてフィールドをマークすると考えることができます。 AddRemoveClearなどList<>でも構いませんが、コンストラクタが終了するとインスタンスが修正されます。

0

はい、これはコードに表示されているように行うことができ、私が信じるコンストラクタの前に実行されます。

私はこれが推奨される方法であると言いたいと思います。なぜなら、時には人々がコンストラクタのフィールド変数を初期化することを忘れてしまうからです。

関連する問題