2016-08-10 10 views
-4

私はいくつかのサービスのコンストラクタを持っている:コレクションの更新時にコンストラクタでの使用を参照しますか?

public Ctor(List<Items> items) 
{ 
    _items = items; 
} 

public void Work() 
{ 
    if(_items.Count() > 5) 
    //do some work 
} 

Work方法は、時間によって時間呼び出されます。 オブジェクトの外に私が変更した場合items - どうなりますか? _items.Count()は変更されますか? StaticClass.Itemsアップデート外項目コレクションの変更

public void Work() 
{ 
    if(StaticClass.Items.Count() > 5) 
    //do some work 
} 

:ので、私はこれを使用して、この現在のバージョンで

。 だから、私はこの作れば:

var service = new Constructor(StaticClass.Items); 

をそして私はStaticClass.Items要素を更新 - または(いくつかのタイマーによる)Workメソッド呼び出しは、私がrefキーワードを使用する必要があるとき

は、私が実際_items.Count()値を使用することはできますか?

+6

試してみてください。あなたはすでにコードを書いています。あなたがそれを実行するときに何が起こるかを見てください。 – Servy

+2

なぜあなたが 'ref'で何かを渡しているのか分からなければ、おそらくそれは必要ありません。それはそれを必要とする非常にまれな状況です。 –

+1

あなたが求めていることは私には分かりません。コレクション内の項目の数が変更された場合、そのコレクションで '.Count()'を呼び出した結果も変更されます。 '.Count()'は現在の項目数を返します。ここで問題とは何か? – David

答えて

5

例のようにコンストラクタでコレクションを渡すと、実際にはリストの参照が渡されます。 refキーワードは、ほとんどの場合、structと値タイプのパラメータです。この行う

:IEnumerableをまたはリストは、あなたのケースでは、通常のタイプを参照しているため

public myClass(IEnumerable<MyOtherClass> pMyItems) 
{ 
    _items = pMyItems; 
} 

public myClass(ref IEnumerable<MyOtherClass> pMyItems) 
{ 
    _items = pMyItems; 
} 

と同じになります。

だから、あなたの質問に答える:あなたはrefを使用するか、いいえ、あなたの状況では、インスタンス化オブジェクトの外にコレクションを変更すると、インスタンス化オブジェクト内のコレクションを変更するかどうか:それは同じインスタンスで、両方の場所で参照。

C#のrefキーワードのMSDN entryはこちらです。

+1

答えを読んだ後、私はその質問を理解した。 – Sinatr

関連する問題