jpl*_*079 0 system.reactive rxjs
我正在尝试学习/理解 Rx,特别是 RxJS,并不断看到对 IObservable、IObserver 等的引用。
谁能告诉我领先I意味着什么和/或它来自哪里?
从我的搜索来看,它看起来像是<T>类型。如果这是错误的或幼稚的,我也希望对此进行一些澄清。
谢谢!
在MFC对C的你们昔日++,微软不得不匈牙利命名法到非常刺激性的艺术形式,所有具体的类都带有前缀C和他们的COM接口有I,这确实有助于避免在一个COM接口和类可能共享相同的名称冲突把你的项目搞得一团糟。
这种表示法的一部分延续到 .NET 中,除了只有接口保留了I前缀,但类和其他类型删除了它们的Cs。这确实使非接口密集型代码更易于查看,但如果您以 2 个字母的首字母缩略词开头,则可能会导致歧义I(因为根据 .NET 样式指南,2 个字母的首字母缩略词必须完全大写),但这种情况很少见。
(我注意到泛型类型名称占位符的前缀为Ttoo,例如TKey和TValuein 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++ 没有接口类型,只有纯抽象类和多重继承,因此在ICOM 之外通常根本看不到前缀。
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |