我想学习/理解的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没有发明接口,命名约定很常见。尽管同意其余的。 –