我想學習/理解的Rx,特別RxJS,並不斷看到引用的IObservable,IObserver等IObservable中的'I'<T>或IObserver <T>是什麼意思?
誰能告訴我是什麼導致I
手段和/或它從何而來?
從我的搜索,它看起來像<T>
是爲類型。如果這是錯誤的或天真的,我會很感激這方面的澄清。
謝謝!
我想學習/理解的Rx,特別RxJS,並不斷看到引用的IObservable,IObserver等IObservable中的'I'<T>或IObserver <T>是什麼意思?
誰能告訴我是什麼導致I
手段和/或它從何而來?
從我的搜索,它看起來像<T>
是爲類型。如果這是錯誤的或天真的,我會很感激這方面的澄清。
謝謝!
在你們MFC的C++的昔日,微軟不得不匈牙利命名法到非常刺激性的藝術形式,所有具體的類都帶有前綴C
與I
他們的COM接口,這確實有助於避免衝突,其中一個COM接口和班級可能會共用同一個名字,並且會讓您的項目變得渾濁。
這個表示法的一部分被轉移到.NET中,除了接口保留前綴I
,但類和其他類型刪除了它們的C
s。這確實使得非界面繁重的代碼更易於查看,但是如果您開始使用以字母I
開頭的2個字母的縮寫名稱(因爲根據.NET樣式必須完全大寫兩個字母的首字母縮寫詞)準則),但這很少見。 (我注意到通用類型名稱佔位符的前綴也是T
,例如,TKey
和TValue
在Dictionary
中)。
爲什麼需要這樣做的一個例子是在.NET中處理集合時,如果構建可重用的庫並且不想公開實現細節(例如,如果使用List<T>
或T[]
作爲底層收集字段類型),您可以使用接口爲IList<T>
或IReadOnlyList<T>
。如果該接口簡單地稱爲List<T>
,它將與實際類型List<T>
衝突,並且ReadOnlyList<T>
(接口)可能與ReadOnlyCollection<T>
(一個類)相混淆。
您可能會爭辯說,如果類和接口有不同的名稱空間,這不會成爲問題。 C是這樣做的:struct
類型和標量存在於不同的名稱空間中,不幸意味着每次使用struct
類型名稱時,其用法必須以struct
(例如聲明:struct Foo foo
)作爲前綴。人們通過使用帶有匿名結構的typedef
來解決這個問題,但我覺得最終結果很混亂(而且Linux內核編碼準則也禁止這樣做)。
但是,在Java中,接口沒有以I
作爲前綴,而是具有類名稱。無論這是「正確的」還是「更好的」完全是爲了辯論。 C++沒有接口類型,只有純粹的抽象類和多重繼承,所以在COM之外通常不會看到前綴I
。
我希望我能再次爲第一句話重新投票。這最後堅持匈牙利符號強制社區作爲供應商的公約,激怒了我不盡結束:) – David
嘗試創建與IATA或國際民航組織相關的接口:) –
@PanagiotisKanavos是的,但你爲什麼要爲那些接口哈哈。他們只是機場上的物業。 –
接口。命名約定來自.net,其中純抽象類在稱爲Interface的框架中有一個特殊的構造。 Javascript是一種鴨子打字的語言,沒有這樣的東西。然而,你仍然有一個抽象的合同概念,你期望履行。 – Aron
.net沒有發明接口,命名約定很常見。儘管同意其餘的。 –