好的,我從基類A
得到B
類型。 A
實現IDisposable
明確的,但我必須做額外的清理工作在B
,所以我實現B
IDisposable
:在F#中調用一個基類顯式接口方法
interface IDisposable with
member i.Dispose() =
// ... additional work
base.Dispose() // <- want to do but cannot
的問題是:如何從基地訪問的Dispose法?
(base :> IDisposable).Dispose()
產生編譯器錯誤:Unexpected symbol ':>' in expression. Expected '.' or other token.
做這樣的事情
(i :> IDisposable).Dispose()
當然
產生對運行時StackOverflowException
- 我怎麼能做到這一點?對不起,但從未遇到過這樣的事情......
行 - 我可能已經把這個錯誤的方式 - 一個不是我自己的類型(這是一個'DuplexClientBase')之一 - 所以這不是一個解。是的,我知道你不能以這種方式使用基地(編譯器說這麼多) - 問題是我如何得到基地處置。現在我解決了這個問題,通過使用公共成員方法來清理並通過調用此方法清理調用者+處理,但這只是一種破解,並且感覺錯誤 – Carsten 2012-03-05 15:57:17
您是否檢查過'Dipose'是否有可重載超載? '保護虛擬無效Dispose(布爾處置)'是一種常見的模式。 – Daniel 2012-03-05 15:59:24
我沒有檢查過,但沒有,如果MSDN是正確的:http://msdn.microsoft.com/en-us/library/ms576169.aspx - 我覺得你不能在F#中這樣做,如果有人可以證實這一點? – Carsten 2012-03-05 16:02:34