【发布时间】:2021-03-15 16:37:24
【问题描述】:
我什至不知道如何正确命名我的问题,所以如果有任何建议,我都会更改它。我遇到的问题是这个;我有一个对象有一些处置工作要做。使用“using”关键字和范围是不可能的,因为对象可以使用很长时间。我不想依赖程序员记住对这些对象调用 Dispose(),因为他可能会忘记。相反,我希望对象的所有或部分方法像这样工作:
- 所有方法都先进入某个通用函数
- 这个通用函数调用原始方法
- 根据通用方法的布尔参数(例如),通用方法可能通过一些清理工作(处置)完成
所以如果我有 10 种方法,我希望它们都进入同一个地方,完成它们的工作,然后处理掉。而且我不想在这 10 种方法中重复调用 dispose 方法。
例子:
public void SomeBaseFunc(bool shouldDispose) //all methods first get drained here
{
//call whatever original func that the client called
//query bool param and dispose
}
【问题讨论】:
-
“我不想在 10 个方法中的每一个中重复调用 dispose 方法” - 为什么不呢?这比将所有呼叫站点更改为
yourClass.Foo(yc => yc.OriginalMethod())工作量少。 -
嗨。我不是 C# 专家,但我认为面向方面的编程可以帮助你
-
I do not want to rely on the programmer to remember call Dispose() on these objects because he might forget然后解雇他。或者像其他人一样依赖终结器 -
该类应该实现
IDisposable,并且消费者的工作要记住正确处理它,using或其他方式。这是 C# 程序员生活中的一部分。如果他们忘记了,那是他们,而不是你。 -
您能详细说明一下这个场景吗?在我从事 C# 编程二十年的情况下,我很难想象潜在的问题是什么......除非有问题的对象正在处理一些非托管代码,在这种情况下,您可能应该实现一个终结器。
标签: c# .net oop design-patterns reflection