2

以下のコードを検討してください

class Repository{
  public static Item i; //Item is a type (class)
  GetItem(){
    // initialize i if null. Read i from an xml file if the last write time of file is greater than last read time else return current i
    return i;
  }
  SaveItem(item){
    //save i;
    //write i to xml file
    i=item;
  }
}

class User{
  public static void Main(){
    Repository r = new Repository();
    r.GetItem().MakeChangesToItem(); //method inside item to make some changes
    r.SaveItem(r.GetItem());
  }
}

このコードが散発的に動作する可能性はありますか? どうやらそれは私にとってそうです。変更が静的アイテムに反映される場合と反映されない場合があります。Main メソッドのコードを

Item i=new Repository().GetItem();
i.MakeChangesToItem();
r.SaveItem(i);

それは正常に動作します。これを経験した人はいますか?ありがとう

4

2 に答える 2

3

静的とは、どのインスタンスにも関連付けられていないことを意味しますが、代わりにタイプごとに関連付けられています。静的に関する一般的な問題は、スレッド化です。複数のスレッド (たとえば、ASP.NET または WCF アプリケーション、または自分でスレッド/タスク/並列を使用するもの) がある場合、同じフィールドを上書きして、すべてが異なることについて話していると考えているため、狂気が生じる可能性があります。

static はその分野には非常に適していないと思います。

于 2012-09-08T06:52:38.807 に答える
0

さらに、静的オブジェクトは、閉じた型のインスタンスのセット間で共有されたクラス型に関連しています。したがって、静的オブジェクトは実行時に異なる動作をします。対照的に、静的オブジェクトが不変であるため、マルチスレッドを使用する場所でこのオブジェクトを気にする必要がない場合。

于 2012-09-08T07:08:52.140 に答える