我有两个方法重载:
bool HasRight(RightType rightType, string cityId);
bool HasRight(RightType rightType, string cityAlias);
当然它不会编译为方法signatues是相同的。在这种情况下解决命名问题的最佳方法是什么?
答案 0 :(得分:6)
使用不同的方法名称,不要滥用语义断开连接的重载。
例如:
bool HasRightById(RightType rightType, string cityId);
bool HasRightByAlias(RightType rightType, string cityAlias);
答案 1 :(得分: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 :(得分:2)
我认为您唯一的选择是在无法更改其中一个参数的数据类型时重命名一个或两个函数:
HasRightById / HasRightByAlias
答案 3 :(得分: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)
{
}
答案 4 :(得分:1)
更好地设置方法名称,这意味着:
bool HasRightById(RightType rightType, string cityId);
bool HasRightByAlias(RightType rightType, string cityAlias);
答案 5 :(得分:0)
由于运行时正在查看方法名称和参数类型(而不是参数名称)以解析方法调用,因此您可以更改名称或更改参数类型。一般来说,我有一种方法,有一个类似于:
bool HasRightId(RightType rightType, string cityId);
bool HasRightAlias(RightType rightType, string cityAlias);
你喜不喜欢,如果你不能将Id
作为int
传递,那么除了更改名称之外别无他法......
答案 6 :(得分: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之一不为null,并执行相应的代码。