为什么我需要在我的基础 class 中定义 Dispose 尽管它是抽象的?

Why I need to define Dispose in my base class although its abstract?

我编写的应用程序需要 Wireshark 个文件(Pcap、Snopp、Pcapng...)打开此文件并读取所有 Packets

所以我创建了这个 abstract class,每个从这个 class 继承的 class 都需要实现明显的方法才能打开特定格式:

public abstract class WiresharkFile
{
    protected string _fileName;
    protected int _packets;
    protected string _duration;
    public abstract void ReadFileDetails();
}

所有子 classes:

public class Libpcap : WiresharkFile, IDisposable, IEnumerable<WiresharkFilePacket>
{
    ....
}

现在当循环特定格式并读取数据包时:

using (wiresharkFile = new Libpcap(file))
{

}

我有这个编译错误:

type used in a using statement must be implicitly convertible to 'System.IDisposable'

所以我的问题是,如果我不能从这种类型创建对象,为什么我需要在我的基础 class 中实现 IDisposable 以及我应该在我的基础 Dispose 中写什么class ?

using 语句尝试在您传递给它的实例上调用 IDisposable.Dispose。此实例的类型为 WiresharkFile。翻译后的代码看起来像这样:

WiresharkFile wiresharkFile = new Libpcap(file);

try
{
    // ...
}
finally
{
    wiresharkFile.Dispose();
}

但是 WiresharkFile 不支持 IDisposable 接口,因此 Dispose() 未定义。要么你简单地添加 IDisposable 到你的抽象基础 class 像这样:

public abstract class WiresharkFile : IDisposable
{
}

不需要实现Dispose(你必须在Libpcap中实现),或者你创建一个[=21的实例=] 并将其传递给 using-语句,如下所示:

using(Libpcap wiresharkFile = new Libpcap(file))
{
    // ...
}