我一直在尋找一些接口實現,因爲我無法使用「使用」的關鍵字,以確保妥善處置在C#中的FileInfo對象,但編譯器給了我這個錯誤:一般接口和接口的含義是什麼?
'System.IO.FileInfo': type used in a using statement must be implicitly convertible to 'System.IDisposable'
所以,從我做起記錄關於這些特定接口的實現。
我最終看到所有簡化爲鍵入:類名旁邊的IDisposable並自己添加Dispose()方法,這就是您如何創建IDisposable。
第一個問題:
這是什麼意思?框架創建者不應該讓這些項目 - 一次性/可空或任何您想要的常用界面 - 而不讓我們擔心它?
我作爲一名程序員工作了兩年,但我作爲一個業餘愛好多年,我從未理解爲什麼界面是有用的或他們的目的是什麼。他們實際上對我來說似乎很沒用。
從我理解他們唯一的目的是作爲一個「契約」,這是一個我從來沒有完全理解的定義。像nto這樣的人說他們可以說:「它只是意味着你必須重新實現你所繼承的類的所有方法,即使你讓它們變成空的」,而不是那個尷尬的「契約」定義。
無論如何,爲什麼?爲什麼我需要編譯器告訴我需要實現這些方法?我想我永遠不會那樣做。
通常我從編程學習或應用這些概念,但是我發誓我從來沒有爲我和我的同事找到或看到過,一個界面是有用的,需要的,一個好的選擇或一些方便的情況...
我想即使我看到人們使用它們,我也會永遠不會使用它們......爲什麼?
好吧,是不是有點明顯,一個接口是有用的,只是從*使用*關鍵字?您可以將任何*種類的對象傳遞給它。包括微軟從未設想過的那些,比如你創建的類。只要它實現了IDisposable。 *對每個*關鍵字來說都是相同的,它可以枚舉*任何*集合對象,而不僅僅是從.NET Framework類創建的對象,它只需要實現IEnumerable。 – 2014-10-04 09:12:53
嗯,在所有令人困惑的東西,也許@HansPassant給了我一點點光... 無論如何,我不喜歡它...你必須知道所有接口說某人,嘿在我需要你的功能一個IDisposable,一個IEnumerable。自己創建接口意味着每個使用它的人都應該知道它具有什麼方法... 如果在需要某人將其實現到接口之前實現所需的方法來處理某些事情,那會更好嗎? 對不起,如果我聽起來很愚蠢,我沒有足夠的經驗 – user2235691 2014-10-05 17:28:56
@ user2235691:你*不能實現所需的方法,因爲接口的每個實現者都可能以不同的方式實現它的方法。返回列表內容的'IEnumerable'的實現方式不同於'IEnumerable',它返回從數據庫服務器接收到的內容。唯一相同的部分是用於迭代列表/數據庫結果集中的項目的方法集 - 換句話說,public * interface *。 – 2014-10-06 06:14:33