Dot-Net

無法呼叫 Dispose?

  • February 23, 2015

這個讓我有點困惑……試圖處理 XmlReader

XmlReader reader = XmlReader.Create(filePath);
reader.Dispose();  

提供以下錯誤:

‘System.Xml.XmlReader.Dispose(bool)’ 由於其保護級別而無法訪問

但是以下很好:

using(XmlReader reader = XmlReader.Create(filePath))
{
}

當我查看 Reflector 中的定義時,我不明白為什麼我不能呼叫 Dispose

XmlReader

Dispose的實現:

處置

誰能指出我錯過了什麼?

問題是XmlReader使用顯式介面實現實現IDisposable。所以你可以寫:

XmlReader reader = XmlReader.Create(filePath);
((IDisposable)reader).Dispose();

using但是,無論如何,我強烈建議使用聲明。除了在另一個實現中之外,您應該非常罕見地顯式呼叫。Dispose``Dispose

編輯:如前所述,這在 .NET 4.5 中是“固定的”,因為它公開了從 .NET 4.5 開始的公共無參數Dispose方法以及顯式介面實現。因此,大概您正在針對 .NET 4.0 或更早版本進行編譯(可能是 .NET 2.0 給定了您的標籤),但是針對 .NET 4.5 使用了 Reflector?

引用自:https://stackoverflow.com/questions/9582320