2011-12-16 130 views
2

我有兩個方法重載:命名和重載

bool HasRight(RightType rightType, string cityId); 
bool HasRight(RightType rightType, string cityAlias); 

當然它不會編譯爲方法signatues是相同的。在這種情況下解決命名問題的最佳方法是什麼?

回答

3

你能立即區分一個id和一個別名嗎?如何簡單地說:

bool HasRight(RightType rightType, string cityIdOrAlias) 

如果不明確的,像「如果它與:開始,例如:nyc,那麼它就是一個ID,否則它被認爲是一個別名」。其他選項:

  • 後綴名:

    bool HasRightById(RightType rightType, string cityId) 
    bool HasRightByAlias(RightType rightType, string cityAlias) 
    
  • 採取兩個和需求只有一個方法裏面:

    bool HasRight(RightType rightType, string cityId, string cityAlias) 
    
2

我認爲你唯一的選擇是重命名一個或兩個功能,當你不能改變它的一個參數的數據類型:

HasRightById/HasRightByAlias

5

使用不同的方法名稱,不濫用超負荷語義斷開的東西

例如:

bool HasRightById(RightType rightType, string cityId); 
bool HasRightByAlias(RightType rightType, string cityAlias); 
1

更好的方法集的名字,這意味着什麼:

bool HasRightById(RightType rightType, string cityId); 
bool HasRightByAlias(RightType rightType, string cityAlias); 
0

因爲運行時是看方法的名稱和參數類型(不是參數名稱)來解決方法調用,您可以更改名稱或更改參數類型。一般我有一個suffis方法,是這樣的:

bool HasRightId(RightType rightType, string cityId); 
bool HasRightAlias(RightType rightType, string cityAlias); 

你喜歡還是不喜歡,有沒有別的比更改名稱做,如果你不能通過Idint ......

2

您可以使用一個枚舉的,像這樣...

public bool HasRight(RightType rightType, string value, RightValue valueType) 
{ 
    if (valueType == RightValue.CityAlias) 
    { 

    } 
    else if (valueType == RightValue.CityId) 
    { 

    } 
} 

public enum RightValue 
{ 
    CityId, CityAlias 
} 

或不同名稱的方法

bool HasRightByCityAlias(RightType rightType, string cityAlias) 
{ 
} 

bool HasRightByCityId(RightType rightType, string cityId) 
{ 
} 
0

你有兩種方法不同的名字,有意義的名稱:或者

bool HasRightById(RightType rightType, string cityId); 
bool HasRightByAlias(RightType rightType, string cityAlias); 

,如果你的目標.NET 4.0或更高版本,可以使用使用默認值命名參數:

bool HasRight(RightType rightType, string cityId = null, string cityAlias = null); 

然後您必須確保cityId和cityAlias之一不是nul l,並執行相應的代碼。