Mam pytanie dotyczące wyrzucania przedmiotów.Jak prawidłowo pozbyć się obiektów: wstrzyknięty w stosunku do posiadanego
rozważyć ten IDisposable
klasa
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);
}
}
na pierwszym konstruktorem, MyProp
jest wstrzykiwany. Więc MyClass
nie jest właścicielem obiektu. Ale na drugim konstruktorze, MyProp
jest tworzony lokalnie. Czy zawsze należy wyrzucać MyProp
, czy powinienem najpierw sprawdzić, czy jest wstrzykiwany, czy też nie.
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);
}
}
Popieram drugie podejście. Usuwanie przedmiotów, które nie stworzyłeś, może później doprowadzić do wszelkiego rodzaju nieprzyjemnych niespodzianek. – Dirk
Brzmi bardzo podobnie do http://stackoverflow.com/questions/4085939/who-should-call-dispose-on-idisposable-objects-when-passed-into-another-object?rq=1 –
@DmitryBychenko Ponieważ byłoby to być "prawdziwym", gdy zostało ono również wstrzyknięte, potrzebuje czegoś innego (jak ta wartość bool) mówiącego o dwóch sytuacjach. –