2011-12-04 41 views
5

我有一個枚舉Pitch和一個類Pitch,對我來說這兩個名字都應該這樣命名,但是同名的這兩個名字都是令人困惑的。有沒有關於枚舉的名稱與類類型衝突的指導原則?枚舉名與類名衝突時該怎麼辦?

例:

public enum Pitch 
{ 
    Fastball, 
    Sinker, 
    Curveball 
} 

public class Pitch 
{ 
} 
+3

如果您有兩種類型要命名相同,那麼您的設計可能存在問題。你能向我們展示這個類和枚舉的代碼嗎? – Steven

回答

6

將枚舉PitchType,PitchKind,PitchMagnitude,PitchQuality,PitchShape或任何最適合的名稱命名。


另一個考慮是班級設計是否可以改進。相反,具有一流的間距內PitchType財產,你也可以創建一個類層次結構:

public abstract class Pitch {} 

public class Fastball : Pitch {} 

public class Sinker : Pitch {} 

public class Curveball : Pitch {} 
+0

PitchType如何?任何人都可以想到比Type更好的詞,因爲它在運行時本身有意義嗎? – Rhubarb

+1

你能向我們展示枚舉嗎?它包含了什麼? –

+0

public enum Pitch {Fastball,Curveball,Sinker} – Rhubarb

3

使用命名空間對他們進行邏輯分組。對於框架,類名是全名,可以是MusicPlayer.Notes.Pitch,也可以不是Pitch。因此不同名稱空間中的類不會發生衝突。

3

嵌入的枚舉類中的:

public class Pitch 
{ 
    public enum Kind { 
     Fastball, 
     Curveball, 
     Sinker 
    } 
} 

然後,您可以通過類訪問:

Pitch.Kind.Fastball 
+0

我想到了那個,但是這違反了一些我無法想到的面向對象的約定嗎?是否讓人們爲了應對衝突而進行額外的命名意味着它仍然是一個好設計? – Rhubarb

+0

我在這裏看到沒有問題。但枚舉應該最好嵌入到它將被使用的類中,或者至少它應該與它有強大的邏輯關係。 –

+0

請參閱stackoverflow問題[使用嵌套的C++類和枚舉的優點和缺點?](http://stackoverflow.com/questions/216748/pros-and-cons-of-using-nested-c-classes-and-enumerations) 。 –

1

當枚舉未嵌入到類中時,請確保在標籤前使用了一些不同的名稱,以防止名稱衝突。您也可以使用joey建議的命名空間。