日期:2014-05-17  浏览次数:20664 次

C#关于方法内使用using的疑惑问题
本帖最后由 gijquery4 于 2013-07-18 12:08:35 编辑

class A
{
        public DataTable Test()
        {
            using (DataTable Data = new DataTable())
            {
                //...
                //此处对Data进行赋值操作代码...
                //...
                return Data;
            }
        }
}

请教以上代码中Test()方法,返回的Data在其他类中使用。会不会因为在Test()方法中使用了using(...){}而影响返回的Data呀?会不会被GC掉呀?求解读。谢谢
C# using GC 方法

------解决方案--------------------
不会
你已经 return Data;

------解决方案--------------------
从来不用 using,容易误导,也省不了多少代码。
------解决方案--------------------
不影响,using只是说Data这个变量只在{}里面有效,最后return Data;返回了这个data。
------解决方案--------------------
引用:
从来不用 using,容易误导,也省不了多少代码。

我是几乎不用的,没必要
------解决方案--------------------
应该是不能这么用吧。

当离开using的作用域的时候,data就会被自动调用Dispose()方法。
但是此时GC不见得马上就收集了,所以return出去的有一小段时间可以用。
如果GC收集之后,应该就会出现未将对象引用设置到对象实例的错误了。
------解决方案--------------------
同意5楼,不能用using。Dispose调用后,按照微软的设计习惯,通常会将内部的private变量isDisposed设为true,而很多内部属性和方法都会去判断isDisposed是否为true,如果为true的话,就会直接抛异常。

------解决方案--------------------