2012-01-17 69 views
10

我正在写一个名称以I开头的类(因为这是我们与之集成的产品的名称 - 无法更改)。以I开头的C#类名称

约定规定类名必须以大写字母开头,但在这种情况下,消费者会认为它是界面。

是否有任何文档指导开发人员在这里采用正确的方法?此外,如果我需要实施和接口,会发生什么情况 - 它应该是IiProduct/IIProduct吗?

编辑补充:

我不能提及的原因很明显的产品,但它遵循相同的大写约定苹果。 iPhone,因此IPhoneClass(遵循它们的品牌,但作为一个接口出现)而不是IphoneClass(遵循约定而不是品牌)。

+8

我不认为这是一个接口,接口开始'我 ....' – 2012-01-17 11:29:40

+0

我不能提及的原因很明显的产品,但它遵循相同的大写约定苹果。 iPhone,因此IPhoneClass(作为界面显示)而不是IphoneClass(正如您在评论中提到的,并显示为类)。 – Liath 2012-01-17 11:31:12

+1

什么@GeorgeDuckett说 - 一个很好的例子是'Image'类。 – Widor 2012-01-17 11:32:25

回答

6

如果产品名称是例如iPhone,那么在这种情况下,我会打电话类Iphone保持类命名一致。界面应该是IIphone,这看起来不太好,但其含义很清楚(因为它遵循约定)。

我使用类,如果他们认为这是一个接口,比如果没有被资本化的产品,是按照惯例会更不高兴肯定的人。

+0

将此标记为答案,因为它首先在评论中给出。 – Liath 2012-01-17 13:37:51

8

接口以I作为前缀,然后使用大写字母来表示接口名称。所以界面将是IImposibleProduct和类将是ImposibleProduct

+0

他的产品名称就像iImpossibleProduct。那你怎么办呢? – shamp00 2012-01-17 11:38:47

+0

坚持公约。为iPhone类使用iPhone,为iPhone界使用iPhone。 – Sjoerd 2012-01-17 11:40:28

+0

在iPhone的情况下,我会认为遵循正确的约定,而不是“品牌”的约定,并呼吁这样的类iPhone,而不是iPhone。 – 2012-01-17 11:46:42

0

你能否改变班级的名字以确保班级不以I开头?

虽然通常情况下,您会希望我认为不属于属于一个词表示一个接口。以I开头的类名(例如,Interpolator)很好,并且没有特别含糊。

1

如果课程名称以I开头,那么这很好,例如, IndexIdea都是有效名称。 IIndex将是一个有效的接口名称。

有关约定的帮助,您可以考虑拿起Code Complete的副本,这是许多程序方面的一个惊人的指导来源。

2

我遵循这个约定的接口。

  1. 找到接口中最重要的方法。
  2. 添加能够后缀与它。
  3. 大写的第一个字母。
  4. 添加前缀

见的例子

interface ICallable{ 
    public void call(); 
} 

ICallable = I + CapitlizeFirstLetter(电话+能)

我想大多数开发人员都遵循这些约定。从这个角度看,IClass,IDone,ICall,IncomeTax等都不是接口。但分别为IClassable,ICallable,ITaxable等接口。

+0

以我个人的观点来看,这只是让其他人必须阅读和理解你的代码而生活困难。 IDone或ICall会向任何开发人员表明他们是接口。但是,我确实同意命名应该指出界面的用法。 – Digbyswift 2012-01-17 11:48:48

0

你可以用你用“I”大写字母“坏”叫名字类其他名称 例如:

//"Bad" name class 
public class IBadClass 
{ 
    public void SomeFuncA(int i) 
    { 
    } 

    public void SomeFunctB(string str) 
    { 
    } 
} 

//"Better" name class 
public class BetterNameClass 
{ 
    private IBadClass _badClass; 

    public BetterNameClass() 
    { 
     _badClass = new IBadClass(); 
    } 

    public void SomeFuncA(int i) 
    { 
     _badClass.SomeFuncA(i); 
    } 

    public void SomeFunctB(string str) 
    { 
     _badClass.SomeFunctB(str); 
    } 
}