2011-12-16 5 views
2

を過負荷が私は2つのメソッドのオーバーロードがあります。もちろんネーミングと

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

メソッドsignatuesが同じであるとして、それはコンパイルされません。この場合の命名問題を解決する最善の方法は何ですか?

答えて

3
...あなたが intとして Idを渡すことができない場合

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

あなたがそれを好きかどうか、名前を変更するよりも行うには他に何も、ありません。一般的に私はsuffisを持つ一つの方法は、のようなものを持っています

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

私はあなたの唯一のオプションは、パラメータの1つのデータ型を変更できない場合、一方または両方の機能の名前を変更することだと思う:、

5

使用異なるメソッド名

HasRightById/HasRightByAlias はしないでください意味的に切断されたもののオーバーロードを誤用する。例えば

:ランタイムが解決するメソッド名とパラメータタイプ(ないパラメータ名)を見ているので、

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

ベター・セット名、メソッド呼び出しでは、名前を変更するか、パラメータの種類を変更します。

0

:何かを意味する方法の

bool HasRightById(RightType rightType, string cityId); 
bool HasRightByAlias(RightType rightType, string cityAlias); 
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

あなたは意味のある名前で、異なった二つの方法に名前を付ける必要があります:あなたは、.NET 4.0以降をターゲット場合、

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

を代わりに、使用することができますデフォルト値の名前付き引数:

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

次に、cityIdとcityAliasのいずれかがnulでないことを確認する必要がありますlを呼び出し、対応するコードを実行します。

関連する問題