2011-11-24 47 views
1

我只是整理了一些代碼時,我發現了類此區域:IDisposable.Dispose()作爲方法名是什麼意思?

#region IDisposable Members 

     void IDisposable.Dispose() 
     { 
     } 

    #endregion 

現在明白了,這是執行的Dispose方法IDisposable接口,我知道類的聲明說,這個類實現IDisposable接口。

什麼我不明白就是爲什麼有這麼一句話:

void IDisposable.Dispose() 

而不是:

public void Dispose() 

我猜測,IDisposable.Dispose明確表示,這是實現IDisposable的Dispose接口?這是正確的嗎?這樣做的好處是什麼?

+3

你應該閱讀關於C#中接口的顯式和隱式實現請參閱 - http://stackoverflow.com/questions/143405/c-interfaces-implicit-and-explicit-implementation –

+1

哇,實際上給出了比微軟文章!你應該把你的評論作爲答案! – AidanO

+0

我同意@AidanO - 將其作爲回答發佈。 – Tim

回答

4

這是一個explicit interface implementation

這意味着只有IDisposable類型的變量才能在該類上調用Dispose

這樣做「隱藏」Dispose方法與類類型的變量一起使用時 - 如果沒有首先投射到IDisposable,它將無法直接調用它。實施者有可能故意這樣做。如果這個類要實現它自己的Dispose(或從一個類/接口繼承/實現,它也定義了一個Dispose方法),這將允許多個實現存在。

+0

但是爲什麼在這裏可能是個好主意?嘗試** Dispose Pattern **文檔(也許在#code-snippet-7之前https://msdn.microsoft.com/en-us/library/b1yfkh5e.aspx,但這些鏈接似乎腐爛得比我們的樹上的蘋果):如果「自然」處理方法的名字是'Close'(就像'File'),你希望你的用戶這樣做,所以你確保他們只能通過'IDisposable'使用'Dispose'至少我是這樣理解的:「這樣做的時候,讓Close實現與Dispose完全相同並且考慮明確實現IDisposable.Dispose方法是非常重要的。」... – PJTraill

+0

...但我懷疑有很多顯式實現的' IDisposable.Dispose()'是誤解或反覆無常。 – PJTraill