我有2个具有相同名称和相同参数类型的方法。我想重载这些,但它不起作用,因为我收到此错误:
"<Class-name> already defines a member called 'ChangeProfileInformation'
with the same parameter types"
我有这样的事情:
public void ChangeProfileInformation(User user)
{
a
b
}
public void ChangeProfileInformation(User user)
{
a
c
d
}
有谁知道为什么这不起作用?
提前致谢!
答案 0 :(得分:6)
重载意味着使用相同的函数名做不同的事情。为此,两个函数应该有不同的签名,否则编译器无法区分。你必须有不同的签名。
答案 1 :(得分:4)
编译器不知道选择哪一个:怎么会这样?您需要具有不同的名称或不同的参数类型。
或者,为什么不使用可选标志来改变函数的行为?
答案 2 :(得分:1)
方法重载表示方法名称相同但方法签名不同。 Method Signature signifies the Method Name with Input parameters.
您实际上无法使用相同参数类型的相同方法名称实现方法重载。
您可以从以下网站更好地了解方法重载的详细概念:
答案 3 :(得分:0)
不确定为什么要这样做,但是如果你真的想保持相同的名字在其中一个方法中有一个伪参数。
答案 4 :(得分:0)
有点晚了,但是有可能(如上所述发布示例代码),今天我的场景完全一样(构造函数重载,因此无法更改名称)。这是我的做法,小技巧,但是它使我所有与LINQ相关的谓词都位于同一位置:
public BusinessStructureFilterSpecification(int responsibilityTypeId, bool dummy1 = true) : base(x => x.ResponsibleGroups.Any(x1 => x1.ResponsibilityTypeId == responsibilityTypeId))
{
AddIncludes();
}
public BusinessStructureFilterSpecification(int userId, string dummy2 = "") : base(x => x.ResponsibleUsers.Any(x1 => x1.UserId == userId))
{
AddIncludes();
}
现在的诀窍是使用类似这样的参数名称来调用它们:
if (responsibiltyTypeId.HasValue && !userId.HasValue)
spec = new BusinessStructureFilterSpecification(responsibilityTypeId: responsibiltyTypeId.Value);
if (!responsibiltyTypeId.HasValue && userId.HasValue)
spec = new BusinessStructureFilterSpecification(userId: userId.Value);