静态对象的行为?

时间:2012-09-08 06:42:03

标签: c# static

考虑以下代码

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);

它正常工作。 有没有人经历过这个?感谢

2 个答案:

答案 0 :(得分:3)

静态意味着它不依赖于任何实例,而是每种类型。静态的一个常见问题是线程。如果你有多个线程(例如,一个ASP.NET或WCF应用程序,或者你自己使用线程/任务/并行的任何东西),那么随之而来的就是疯狂,因为他们都认为他们正在谈论不同的事情,覆盖同一个领域。

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

答案 1 :(得分:0)

此外,静态对象与在一组封闭类型的实例之间共享的类类型相关。因此静态对象在执行时的行为会有所不同。相反,如果您的静态对象是不可变的,那么您不需要关心使用多线程的对象。