我有关于处理对象的问题。如何正确处理对象:注入还是拥有对象
考虑这个IDisposable
类
public class MyClass : DisposableParentClass
{
private MyProp _prop;
public MyClass(MyProp prop)
{
_prop = prop;
}
public MyClass()
{
_prop = new MyProp();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
_prop.Dispose();
}
base.Dispose(disposing);
}
}
在第一个构造函数,MyProp
注入。所以MyClass
不是对象的所有者。但在第二个构造函数中,MyProp
在本地创建。 我是否应该总是处置MyProp
,或者我应该先检查它是否被注射。
public class MyClass : DisposableParentClass
{
private MyProp _prop;
private bool _myPropInjected = false;
public MyClass(MyProp prop)
{
_prop = prop;
_myPropInjected = true;
}
public MyClass()
{
_prop = new MyProp();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (!_myPropInjected) { _prop.Dispose(); }
}
base.Dispose(disposing);
}
}
我喜欢第二种方法。处理你还没有创建的对象可能会在以后导致各种令人讨厌的惊喜。 – Dirk 2014-09-02 07:36:26
听起来很像http://stackoverflow.com/questions/4085939/who-should-call-dispose-on-idisposable-objects-when-passed-into-another-object?rq=1 – 2014-09-02 07:38:00
@DmitryBychenko因为这会当它被注入时也是“真实的”,他需要别的东西(比如那个布尔值)来告诉两种情况。 – 2014-09-02 07:38:19