返回USING创建的对象

我正在创建一个对象(下面的obj)使用并返回该对象作为函数return的一部分。这会导致在我尝试在另一个函数中使用返回值之前处理像object这样的任何问题吗?

using (MyObject obj = new MyObject()) { . . . return obj; } 

在我尝试在另一个函数中使用返回值之前,这会导致像object这样的问题吗?

是。

你能解释一下你在这里想做什么吗? 这段代码没有任何意义。 “使用”的重点在于,您只在此处 使用对象,然后自动摆脱其稀缺的非托管资源,使其无法使用。 可能有更好的方法来做你想做的事情。

当对象超出范围时,该对象将是Dispose() d,无论是return还是其他代码路径。 使用的唯一目的是为本地范围的 IDisposable对象提供故障保护机制,以便在封闭的代码块中进行清理。

这会导致你的调用函数出现问题,所以不要这样做。

退回后,您的物品将立即处理。 它仍然在技术上可用,因为它没有被垃圾收集,但它将运行Disposefunction。

我在这个例子中遵循的规则是接收对象的方法负责处理它。 你不知道该方法什么时候会用它来完成,所以当它完成时,该方法有责任自行整理。

仅仅是我个人的观点,可能不是最正确的,但是当在作用域中定义工作单元并且您希望处理使用构造中的对象时,应该使用using构造。

是的,这会引起问题。 如果你有这种情况(我可以想到一个返回数据库访问器类的方法)不要使用using块,因为你不能处理这个对象,但调用者是。

它可能适用于没有Dispose方法的对象,但是不需要使用’using’。

即使它适用于您的特定对象,也是错误的。 这不是“使用”结构的用途

从技术上讲,它取决于MyObject在已实现的IDisposable接口的Dispose方法中的作用。

从理论上讲,这可能是完全正常的,因为你只是将事物包装在一个不必要的try / catch / finally块中。

 public void DoStuff() { MyObject myObject = GetMyObject(); Console.WriteLine("Name: " + myObject.Name); } private MyObject GetMyObject() { using (MyObject obj = new MyObject()) { obj.Name = "Aaron"; return obj; } } public class MyObject : IDisposable { public String Name { get; set; } #region IDisposable Members public void Dispose() { //depends what you do in here... } #endregion } 

姓名:亚伦

你会在对象的使用者中得到一个exception,说对象基本上是处理使用范围剂量 – 调用IDisposable实现。

如果需要返回Disposable对象,则需要确保所有代码路径都返回对象或处置它。 请注意,抛出函数的exception是有效的代码路径。 为了涵盖这种情况,您可能希望在创建和返回try-catch或try-finally之间包装代码段,以确保在未成功到达return语句时正确处理对象。