就是那个问题?那么在开发ac#项目时不使用这个约定有多大的罪过?此约定广泛用于.NET类库中.但是,至少我不是一个粉丝,不仅仅是出于理由,而且我认为它没有任何贡献.例如IPSec是PSec的接口吗?是IIOPConnection IOPConnection的接口,我通常去定义找出来.
Java类库已经存在多年没有这个了,我觉得如果没有它我就一直在努力阅读代码.此外,界面应该不是最原始的描述?我的意思是IList <T>作为c#中List <T>的接口,是不是更好的有List <T>和LinkedList <T>或ArrayList <T>甚至CopyOnWriteArrayList <T>?这些类描述了实现?我想我在这里得到的信息比我在c#中的List <T>中得到的更多.
Ham*_*cke 60
Java和C#之间的区别在于Java允许您轻松区分是实现接口还是扩展类,因为它具有相应的关键字implements和extends.
由于C#只能:表达实现或扩展,我建议遵循标准并在接口名称之前加上I.
use*_*own 29
我的opionion也是不好的做法.除了你的原因之外的原因是:
Pol*_*fun 21
尊敬的是,在您的帖子中,您只考虑您的需求(我,我,我),而不是您的代码读者的需求.如果你是一个单独的商店,那么公平,但如果你的代码曾经被其他人读过,那么考虑他们将期望接口有一个I前缀 - 这就是它在.Net中的方式,以及现在有太多人习惯改变它.
此外,如果您为类使用更易读的名称,这将有所帮助.什么是PSec?当我甚至不知道PSec是什么时,我如何判断IPSec是否是一个接口?如果将PSec重命名为例如PersonalSecurity,那么IPersonalSecurity更可能是一个界面.
Mat*_*ion 10
使用I进行接口违背了接口imo的全部要点,它是一个连接器,您可以将不同的具体实现插入到依赖项中.
使用数据库的对象需要DataStore,而不是IDataStore,无论是获取DatabaseDataStore还是FileSystemDataStore或者插入其中的任何内容(或者用于测试的MockDataStore),都应该进行配置.
这本身并不是罪过,而是最佳做法。总而言之,它使事情变得更具可读性。另外,想一想。IMyClass是 的接口MyClass。这很有意义,并且可以避免不必要的混乱。还要记住:语法与implements/extends. 最后,您可以通过简单地检查 VS 中的工具提示/转到来绕过所有这些,但为了纯粹的可读性,我认为该标准很重要。
我不知道,但我确信它们存在。
没见过,但我确信它们存在。