Если у кого-то есть лучшее название, дайте мне знать.
Я сделал DisposeHelper вместо этого:
private Something _thing;
void Dispose()
{
if(_thing != null)
{
_thing.Dispose();
_thing = null;
}
}
... я мог бы сделать это:
private Something _thing;
void Dispose()
{
DiposeHelper.Dipose(ref _thing);
}
Но, по-видимому, я не могу передать DisposeHelper.Dispose IDisposable в качестве ссылки, если только я не использую Something как IDisposable, например:
private Something _thing;
void Dispose()
{
IDisposable d = _thing;
DiposeHelper.Dipose(ref d);
}
... что означало бы, что оно не аннулирует исходное поле.
Вот более абстрактный пример. DoThis работает, DoThis нет:
public class Test
{
public Test()
{
Something o = new Something();
DoThis(o);
DoThat(ref o);
}
private void DoThis(IFoo obj) { }
private void DoThat(ref IFoo obj) { }
}
public class Something : IFoo { }
public interface IFoo { }
Почему я не могу это сделать?