gpt4 book ai didi

c# - 自动处理扩展方法是否合理?

转载 作者:太空狗 更新时间:2023-10-30 00:46:12 24 4
gpt4 key购买 nike

我一直在编写一些自定义 WinForm 控件,这些控件会进行大量绘图,因此往往会有很多基于一次性图形的字段(画笔、钢笔、位图等),因此我的控件的Dispose() 方法必须对它们中的每一个调用 Dispose。

我担心我(或 future 的维护者)很容易错过需要处置的字段,要么是忘记处置它,要么是没有意识到它实现了 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();
}

我的问题基本上是这样做是否合理。我想不出它会搞砸什么,但我对 WinForms 的内部工作原理并不是特别熟悉,这似乎是那种可能会导致令人讨厌的错误的事情(混淆反射和处置)。

最佳答案

通常您不想处置所有一次性成员。例如。对父表单的引用。

关于c# - 自动处理扩展方法是否合理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3890960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com