我添加一些代码到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()是否会做什么有用的东西。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top