C# 为什么我需要在基类中定义Dispose,尽管它是抽象的?

C# 为什么我需要在基类中定义Dispose,尽管它是抽象的?,c#,idisposable,C#,Idisposable,我正在编写接受Wireshark文件(Pcap、Snopp、Pcapng…)的应用程序,打开此文件并读取所有数据包 因此,我创建了这个抽象类,从这个类继承的每个类都需要实现显而易见的方法,以便能够打开特定的格式: public abstract class WiresharkFile { protected string _fileName; protected int _packets; protected string _duration; public ab

我正在编写接受
Wireshark
文件(Pcap、Snopp、Pcapng…)的应用程序,打开此文件并读取所有
数据包

因此,我创建了这个
抽象类
,从这个类继承的每个类都需要实现显而易见的方法,以便能够打开特定的格式:

public abstract class WiresharkFile
{
    protected string _fileName;
    protected int _packets;
    protected string _duration;
    public abstract void ReadFileDetails();
}
以及所有子类:

public class Libpcap : WiresharkFile, IDisposable, IEnumerable<WiresharkFilePacket>
{
    ....
}
我有一个编译错误:

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

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

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

WiresharkFile wiresharkFile = new Libpcap(file);

try
{
    // ...
}
finally
{
    wiresharkFile.Dispose();
}
public abstract class WiresharkFile : IDisposable
{
}
using(Libpcap wiresharkFile = new Libpcap(file))
{
    // ...
}
但是
WiresharkFile
不支持
IDisposable
接口,因此未定义
Dispose()
。您可以简单地向抽象基类添加
IDisposable
,如下所示:

WiresharkFile wiresharkFile = new Libpcap(file);

try
{
    // ...
}
finally
{
    wiresharkFile.Dispose();
}
public abstract class WiresharkFile : IDisposable
{
}
using(Libpcap wiresharkFile = new Libpcap(file))
{
    // ...
}
不需要实现
Dispose
(必须在
Libpcap
中实现),或者创建
Libpcap
的实例并使用以下语句将其传递给

WiresharkFile wiresharkFile = new Libpcap(file);

try
{
    // ...
}
finally
{
    wiresharkFile.Dispose();
}
public abstract class WiresharkFile : IDisposable
{
}
using(Libpcap wiresharkFile = new Libpcap(file))
{
    // ...
}