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 应用程序,或者您自己使用线程/任务/并行的任何东西),那么疯狂可能会随之而来,因为他们都认为他们在谈论不同的事情,覆盖同一个字段。

我会说静态非常不适合该领域。

于 2012-09-08T06:52:38.807 回答
0

此外,静态对象与在一组封闭类型实例之间共享的类类型有关。所以静态对象在执行中会有不同的表现。相比之下,如果您的静态对象是不可变的,那么您在使用多线程的地方就不需要关心这个对象。

于 2012-09-08T07:08:52.140 回答