c# - 我应该如何继承IDisposable?

标签 c# inheritance interface idisposable coupling

已更改类名以保护无辜者

如果我有一个名为 ISomeInterface 的接口(interface)。我还有继承接口(interface)的类,FirstClass 和 SecondClass。 FirstClass 使用必须处理的资源。 SecondClass 没有。

那么问题来了,我应该从哪里继承IDisposable呢?以下两个选项似乎都不太理想:

1) 让FirstClass继承IDisposable。然后,任何处理 ISomeInterfaces 的代码都必须知道是否要释放它们。这对我来说就像紧密耦合。

2) 使 ISomeInterface 继承 IDisposable。然后,任何继承自它的类都必须实现 IDisposable,即使没有可处置的东西。除评论外,Dispose 方法基本上是空白的。

#2 对我来说似乎是正确的选择,但我想知道是否有其他选择。

最佳答案

如果抽象实体(接口(interface)或抽象类)可能有合理的机会需要一次性使用,则应该实现它。 Stream ,例如自身不需要IDisposableIEnumerator<T> 也没有...

抽象基类可能更简单,因为您可以拥有 Dispose() 的默认(空)实现然后,可能还有终结器/Dispose(bool) 模式,即

~BaseType() => Dispose(false);

protected virtual void Dispose(bool disposing) 
{
}

void IDisposable.Dispose() 
{ 
    Dispose(true); GC.SuppressFinalize(this); 
}

关于c# - 我应该如何继承IDisposable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1834263/

相关文章:

python - 重写子类中的 __new__ 以创建特定的父类实例是一种反模式吗?

javascript - 寄生组合继承真的用了吗?

java - 获取实现接口(interface)的通用枚举的值

c# - 自定义 CSS 标签

c# - azure "The remote server returned an error: (530) Not logged in."

c# - MSTest.exe 给出程序集或模块未找到警告

c# - C# 中的字符串和 C++/CLI 中的字符串^...如何传递 "null"?

c# - Visual Studio - 查看所有继承的成员

c# - 为什么可以在基类中实现接口(interface)方法?

php - Laravel 中的仓库和接口(interface)有什么用?