Gib*_*nag 4 .net c# extension-methods dispose
我一直在编写一些自定义 WinForm 控件,这些控件执行大量绘图,因此往往有大量基于一次性图形的字段(画笔、笔、位图等),因此我的控件的 Dispose()方法必须对每个方法调用 Dispose。
我担心我(或未来的维护者)很容易错过需要处理的字段,要么忘记处理它,要么没有意识到它实现了 IDisposable。因此,我在 Object 上编写了一个非常简单的扩展方法,它查找所有 IDisposable 字段并处理它们:
static public void DisposeAll(this Object obj)
{
var disposable = obj.GetType()
.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)
.Select(fi => fi.GetValue(obj))
.Where(o => o != null && o is IDisposable)
.Cast<IDisposable>();
foreach (var d in disposable) d.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
我的问题基本上是这是否合理。我想不出它可能会搞砸什么,但是我对 WinForms 的内部工作原理并不是特别熟悉,这似乎是一种可能会导致令人恼火的错误的事情(扰乱反射和处置)。