Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用';I';接口的前缀是否为_C#_Java - Fatal编程技术网

C# 使用';I';接口的前缀是否为

C# 使用';I';接口的前缀是否为,c#,java,C#,Java,这就是问题所在?那么,在开发c#项目时不使用这种约定有多大的罪恶呢?此约定在.NET类库中广泛使用。然而,至少可以说,我不是一个球迷,不仅仅是因为哮喘的原因,但我不认为这有任何贡献。例如,IPSec是PSec的接口吗?IIOPConnection是IOPConnection的接口吗?我通常都会去定义看看 那么,使用这个约定不会引起混乱吗 是否有任何著名的c#项目或库放弃此约定 有没有像ApacheWicket那样混合约定的c#项目 Java类库已经有很多年没有它了,我觉得我从来没有在没有它的

这就是问题所在?那么,在开发c#项目时不使用这种约定有多大的罪恶呢?此约定在.NET类库中广泛使用。然而,至少可以说,我不是一个球迷,不仅仅是因为哮喘的原因,但我不认为这有任何贡献。例如,IPSec是PSec的接口吗?IIOPConnection是IOPConnection的接口吗?我通常都会去定义看看

  • 那么,使用这个约定不会引起混乱吗
  • 是否有任何著名的c#项目或库放弃此约定
  • 有没有像ApacheWicket那样混合约定的c#项目
Java类库已经有很多年没有它了,我觉得我从来没有在没有它的情况下阅读过代码。此外,接口是否应该是最原始的描述?我的意思是IList作为c#中List的接口,让List和LinkedList、ArrayList甚至CopyOnWriteArrayList不是更好吗?这些类描述了实现?我想我在这里得到的信息比我从c#中的列表中得到的要多

  • 这本身不是罪过,是罪过。总的来说,它使事情更具可读性。还有,想想看
    IMyClass
    MyClass
    的接口。这是有道理的,可以避免不必要的混乱。还要记住
    语法与
    实现/扩展的对比。最后,您可以通过简单地在VS中检查工具提示/转到来绕过所有这些,但是对于纯粹的可读性,我认为标准很重要

  • 我不知道,但我确信它们确实存在

  • 我没见过,但我肯定他们存在


  • 我想说,不遵守这个惯例会让你陷入.NET地狱。这是一个惯例,对我来说,它几乎与在Python中使用实例方法中的
    self
    一样重要。

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


    由于C#只有
    来表示实现或扩展,我建议遵循标准,在接口名称前加上I。

    现有的惯例可以帮助我们所有人。如果有其他.net开发人员可能与您合作,那么是的,遵循约定。

    使用I for interfaces违背了接口imo的全部观点,即它是一个可以将不同具体实现插入到依赖项中的连接器


    使用数据库的对象需要一个数据存储,而不是IDataStore,它应该由配置决定是否获得一个DatabaseDataStore或FileSystemDataStore或插入其中的任何东西(或用于测试的MockDataStore)。

    恕我直言,在你的帖子中,你只考虑了你的需求(I,I,I),而不是代码读者的需求。如果你是一个一人的商店,那么就足够公平了,但是如果你的代码被别人阅读过,那就考虑他们希望界面有一个i-前缀——这就是它在.NET中的方式,现在有太多的人习惯于改变它。
    此外,如果您为类使用更可读的名称,也会有所帮助。什么是PSec?当我甚至不知道什么是PSec时,我如何判断IPSec是否是一个接口?如果PSec改名为PersonalSecurity,则IPersonalSecurity更可能是一个接口。

    一个想法是“I”部分后面可以跟一个动词,说明实现接口的类的作用;像
    ISaveXmlData
    ,形成了一个很好的人类语言名称。

    关键是一致性——只要你坚持在所有接口前面加上I前缀,或者根本不加前缀,这是一个偏好问题

    我对工作中的接口使用I前缀,因为现有代码已经将其用于每个接口的命名约定。我发现,只需在基类名称中查找I前缀,就可以更直观地快速确定一个类是实现了接口还是实现了另一个类


    另一方面,工作中的一些旧项目不使用这种命名约定,这使得代码的可读性稍差,但可能只是因为我习惯了前缀。

    在我看来,这也是一种不好的做法。除您的原因外,还有以下原因:

    • 接口的全部目的是抽象出实现细节。因此,如果使用ipram或Param调用一个方法,这应该无关紧要
    • 精心设计的工具有自己的可能性用图标标记接口
    • 如果您的眼睛在IDE中搜索名称,最重要的部分是字符串的开头。也许你的类是按字母表排序的,现在你有了一组相似的名字,都是从I开始的。。。在一起它们看起来很相似,但容易区分会有好处。从人体工程学角度来看,使用I字头是错误的
    • 更烦人的是:implist,impltthat,AFoo代表抽象Foo,AImplFooBar代表抽象Foo,哪个实现了Bar?SSomething作为Singleton,还是SMath作为static类?住手!:)
    看看BCL。在基类库中有IList、IQueryable和IDisposable。 如果你不在它前面加上一个“I”,人们怎么知道它是一个接口而不是定义


    不管怎样,在我看来,有时候,只有我的2美分的最佳实践会凌驾于惯例之上。虽然我个人可能不喜欢该公约,但不使用它违背了最佳实践,这种最佳实践已经存在了很长时间,我不想去想

    在这种情况下,我会更多地从其他人如何做的角度来看待它。因为99%的普通世界都会在前面加上“我”,这足以保持这种最佳实践。如果你必须引进一个承包商或一个新的开发者,你应该能够
    SqlDataReader dr = cmd.ExecuteReader (CommandBehavior.SequentialAccess);
    if (!dr.HasRows) {
        // ...
    }
    while (dr.Read ()) {
        string name = dr.GetString (0);
        // ...
    }
    
    IDataReader dr = cmd.ExecuteReader (CommandBehavior.SequentialAccess);
    if (!dr.HasRows) {
        // ...
    }
    while (dr.Read ()) {
        string name = dr.GetString (0);
        // ...
    }
    
    List foo = new List(); // Why does it fail?
    
    ISomeInterface s = factory.create();