我正在将一些代码添加到usingC#程序的块中.我有点填充我的应用程序,以前是一个独立的现有代码体,所以我需要做一些搞乱使它适合.最终结果如下:
public class WrapperForMyOldApp
{
public static ItemThatINeed item1;
public static ItemThatINeed item2;
public WrapperForMyOldApp ()
{
item1 = new ItemThatINeed();
item2 = new ItemThatINeed();
}
public static go()
{
// some stuff that i need to do with items 1 and 2
}
}
public class MainProgram
{
.
.
.
public void MethodThatNeedsToMakeUseOfMyApp ()
{
....
using (WrapperForMyOldApp oldAPp = new WrapperForMyOldApp())
{
WrapperForMyOldApp.go();
}
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,这里的问题是:我现在是否已经削弱了使用块的效果和/或产生了任何可能对MainProgram类产生负面影响的特殊副作用?我相信Wrapper对象和它的内容将被Disposed并且执行将按预期继续,但有什么我需要注意的,我忽略了吗?
谢谢!
为了使其工作,您需要让WrapperForMyOldApp实现IDisposable.
然后,WrapperForMyOldApp中的Dispose()调用将进行清理.
但是,静态对象通常用于具有超出单个对象的生命周期的对象.通常,对于这种类型的用法,您将使ItemThatINeed实例非静态,在WrapperForMyOldApp构造函数中生成它们,然后在WrapperForMyOldApp.Dispose()中清除它们.
使用静态对象,你可能会创建一个噩梦 - 你正在构造对象,然后说你要执行清理(在使用块的末尾),所以你Dispose()方法将清理静态对象.但是,如果再次使用它们会发生什么?如果在2个线程中创建两个WrapperForMyOldApp实例,那么正确的行为是什么?如果你想要确定性的清理,我会考虑这些问题.