在我极简化的代码示例中,我的Foo()方法调用GetXmlDataSource()
,返回XmlDataSource
。 CA2000说在丢失范围之前我应该Dispose()
一个XmlDatasource。
XmlDataSource
吗?try
/ catch
/ finally
而在上一个中使用using
吗?XmlDataSource
个对象,一个在upper方法中,另一个在lower方法中? 我对这个语言行为有点模糊,我想成为一个好孩子。
void Foo()
{
XmlDataSource xds = GetXmlDataSource();
}
XmlDataSource GetXmlDataSource()
{
XmlDataSource xmlDataSource = new XmlDataSource();
return xmlDataSource;
}
答案 0 :(得分:1)
我应该将每个XmlDataSource包装在using语句中吗?
如果它超出了该方法的范围,是的,你应该。顺便说一句,您也可以对来自其他方法的变量使用using
。
我应该在较低的一个中使用try / catch / finally吗?
是和否。不应处理XmlDataSource
,因为您打算在其他方法中使用它。如果你有一个阻止变量传递的异常,你应该处理它。
我应该在上面使用吗?
是的,你应该。这段代码可以完成这项工作。
using (XmlDataSource xds = GetXmlDataSource())
{ }
我是否有效地拥有两个
XmlDataSource
个对象,一个在upper方法中,另一个在lower方法中?
不,你有一个。这就是为什么你不应该丢弃较低的一个。有一个参考从一种方法传递到另一种方法。
答案 1 :(得分:0)
1)仅包含使用中的最终用法。 2)不,使用就足够了(注意使用的底层实现是一个try / finally)。 3)你只有一个对象实例。