考虑以下代码
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);
它正常工作。 有没有人经历过这个?感谢
答案 0 :(得分:3)
静态意味着它不依赖于任何实例,而是每种类型。静态的一个常见问题是线程。如果你有多个线程(例如,一个ASP.NET或WCF应用程序,或者你自己使用线程/任务/并行的任何东西),那么随之而来的就是疯狂,因为他们都认为他们正在谈论不同的事情,覆盖同一个领域。
我会说静态非常不适合该领域。
答案 1 :(得分:0)
此外,静态对象与在一组封闭类型的实例之间共享的类类型相关。因此静态对象在执行时的行为会有所不同。相反,如果您的静态对象是不可变的,那么您不需要关心使用多线程的对象。