2012-01-17 76 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); 
    } 
}