题
我添加一些代码到C#程序一个using
块。我有点馅我的应用程序,这在以前是一个独立成代码现有的身体,所以我需要做一些插科打诨得到它,以适应正常的。那是什么结局看起来像如下:
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();
}
}
}
好了,所以这里的问题是:有没有我现在残废使用块的效果和/或产生的任何特殊副作用,可能会在类MainProgram(主程序)产生不利影响?我相信,包装对象,它的内容将被设置,并且将继续执行,如预期,但有什么我需要知道的是我俯瞰?
谢谢!
解决方案
为了这个工作,你需要有WrapperForMyOldApp实现IDisposable。
在WrapperForMyOldApp的Dispose()调用将随后做你清理。
但是,静态对象通常用于具有一个寿命超过单个对象的对象。在一般情况下,这种类型的使用,你会做ItemThatINeed情况下,非静态,生成它们在你的WrapperForMyOldApp构造函数,然后在WrapperForMyOldApp.Dispose清除它们()。
使用静态对象,你可能会创建一个恶梦 - 你构造对象,然后说你要执行的清理(在使用块的结尾),所以你Dispose()方法将被清洁了静态对象。但是,如果他们得到再次利用,会发生什么?什么是正确的行为,如果你在2个线程创建两个WrapperForMyOldApp实例?如果你想确定清理我会考虑这些问题。
其他提示
您是否包装类实现IDisposable和你只是不显示呢?如果它不是一次性的,那么你就不需要使用语句都没有。
那么,如果WrapperForMyOldApp
实现IDisposable
,和你的Dispose()
实现可一定要摆脱任何资源,那么它应该工作...但可以有其他的副作用。该代码可以改变全局(静)态,如文化等,这可能会产生线程。各种各样的东西。
这是个不错的办法,但你需要知道你在封装代码的不的了解Dispose()
是否会做什么有用的东西。