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))
{
// ...
}