对接口使用“I”前缀或不对接口使用

2022-09-01 07:57:06

这就是问题所在?那么,在开发c#项目时不使用此约定有多大的罪过呢?此约定在 .NET 类库中广泛使用。但是,我至少不是一个粉丝,不仅仅是出于美学原因,但我不认为它有任何贡献。例如,IPSec是PSec的接口吗?IIOPConnection是IOPConnection的接口吗,我通常会去定义中找出答案。

  • 那么,使用这个约定不会引起混淆吗?
  • 是否有任何值得注意的 c# 项目或库放弃了此约定?
  • 是否有任何c#项目混合了约定,不幸的是Apache Wicket就是这样做的?

Java类库在没有它的情况下已经存在了很多年,我不觉得我从来没有挣扎过在没有它的情况下阅读代码。另外,界面不应该是最原始的描述吗?我的意思是IList<T>作为c#中List<T>的接口,拥有List<T>和LinkedList<T>或ArrayList<T>甚至CopyOnWriteArrayList<T>不是更好吗?这些类描述实现?我想我在这里得到的信息比我从c#中的List<T>中得到的信息要多。


答案 1

Java 和 C# 之间的区别在于,Java 允许您轻松区分是实现接口还是扩展类,因为它具有相应的关键字和 .implementsextends

由于 C# 只能表示实现或扩展,因此我建议遵循该标准,并在接口名称前放置一个 I。:


答案 2

这在我的鸦片中也是不好的做法。除了您的原因之外,还有:

  • 接口的整个目的是抽象出实现细节。因此,使用IParam或Param调用方法并不重要。
  • 精心制作的工具有自己用图标标记界面的可能性。
  • 如果您的眼睛在 IDE 中搜索名称,则最重要的部分是字符串的开头。也许你的课程按字母排序,现在你有一个相似的名字块,都以我开头......一起。它们看起来很相似,但很容易区分它们是有好处的。使用 I 前缀在人体工程学上是错误的。
  • 更烦人的是:ImplList,ImplThat,AFoo用于抽象Foo,AImplFooBar用于抽象Foo,哪个实现了Bar?SSomething 作为 Singleton,还是 SMath 作为静态类?停下!:)

推荐