gpt4 book ai didi

C# IDisposable问题

转载 作者:太空狗 更新时间:2023-10-29 18:01:24 25 4
gpt4 key购买 nike

我有以下代码示例:

public interface IRepository {
// Whatever
}

public class SampleRepository : IRepository {
// Implements 'Whatever'
}

public class NHibernateRepository : IRepository, IDisposable {

// ...

public void Dispose() { ... }
}

现在 - 真的很糟糕吗?我不确定,但这似乎与C++< 中不标记基类虚拟的析构函数是一样的

我不想让 IRepository 接口(interface)实现 IDisposable,因为这会带来不必要的复杂性和一堆类,这些类也必须实现 IDisposable


这个案例应该怎么处理?

我敢肯定这可能发生在任何类型层次结构 - 当派生类型之一必须管理一次性资源时。

那么我应该怎么办 - 将 IDisposable 拉到第一个界面或保留它并希望用户区分一次性和非一次性存储库?

谢谢。

最佳答案

是的,我会说这很糟糕 - 因为您不能以相同的方式使用所有存储库。

我个人会让存储库接口(interface)扩展 IDisposable - 毕竟用空操作实现它很容易。

这与主框架中的 StreamTextReaderTextWriter 所做的选择完全相同。 StringWriter(例如)不需要处理任何东西......但是 TextWriter 仍然是一次性的。

这一切都是因为 IDisposable 在某些方面是一个奇怪的接口(interface):它没有向调用者传达一些提供的东西......它传达了一些是来电者需要(或者至少,强烈鼓励如果您不同意,可能会出现问题)。

关于C# IDisposable问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4431353/

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