2010-04-14 17 views

回答

16

使用塊是try/finally塊的快捷方式,在實現IDisposable的任何對象上調用Dispose()。

對於流和流編寫器,Dispose()通常手動調用Close()。使用反射鏡,這裏的XmlWriter的Dispose方法:

protected virtual void Dispose(bool disposing) 
{ 
    if (this.WriteState != WriteState.Closed) 
    { 
     try 
     { 
      this.Close(); 
     } 
     catch 
     { 
     } 
    } 
} 

那麼簡單的答案是肯定的,using塊將處理關閉的XmlWriter爲您服務。

+0

這確實是我剛纔看到的代碼。它所做的就是調用'Close'。 – 2010-04-14 18:08:53

3

不,不需要單獨調用它。這正是使用塊的用途。

當執行退出使用塊時,XmlWriter被丟棄,而在內部,XmlWriter.Dispose調用XmlWriter.Close

3

但是...... 反射器上XmltTextWriter.Close()顯示:

如果(this.closeOutput) { this.stream.Close() } this.Stream = null;

closeOutput標誌設置爲settings.CloseOutput,它可以是false。

確定處理程序在XmlTextWriter上使用「using」表達式時是空閒的嗎?

+0

現在它顯示空虛擬功能:public virtual void Close(){} – amuliar 2014-01-18 07:34:36

相關問題