2015-11-15 20 views
0

我正在編寫的應用程序需要Wireshark文件(Pcap,Snopp,Pcapng ...)打開此文件並閱讀所有Packets爲什麼我需要在我的基類中定義Dispose,儘管它的抽象?

所以我創建這個abstract class,每一個從該類繼承類需要實現以明顯的方法,必須打開特定格式的能力:

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

而且所有的子類:

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' 

所以我的問題是,爲什麼我需要在我的基類來實現IDisposable如果我不能從這種類型的創建對象,我應該怎麼寫這個Dispose在我的基類裏面?

回答

2

using-聲明嘗試在傳遞給它的實例上調用IDisposable.Dispose。此實例類型爲WiresharkFile。當翻譯代碼看起來在某種程度上是這樣的:

WiresharkFile wiresharkFile = new Libpcap(file); 

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

然而WiresharkFile不支持IDisposable inteface並沒有被定義爲此Dispose()。要麼你只需添加IDisposable到您的抽象基類是這樣的:

public abstract class WiresharkFile : IDisposable 
{ 
} 

那裏是沒有必要實施Dispose(你必須實現它Libpcap),或您創建的Libpcap一個實例,並把它傳遞到using-像這樣的陳述:

using(Libpcap wiresharkFile = new Libpcap(file)) 
{ 
    // ... 
} 
相關問題