为什么我需要在我的基础 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))
{
// ...
}
我编写的应用程序需要 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))
{
// ...
}