重载具有相同名称和相同参数类型的2个方法

时间:2013-05-18 18:20:30

标签: c# asp.net

我有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
}

有谁知道为什么这不起作用?

提前致谢!

5 个答案:

答案 0 :(得分:6)

重载意味着使用相同的函数名做不同的事情。为此,两个函数应该有不同的签名,否则编译器无法区分。你必须有不同的签名。

答案 1 :(得分:4)

编译器不知道选择哪一个:怎么会这样?您需要具有不同的名称或不同的参数类型。

或者,为什么不使用可选标志来改变函数的行为?

答案 2 :(得分:1)

方法重载表示方法名称相同但方法签名不同。 Method Signature signifies the Method Name with Input parameters.您实际上无法使用相同参数类型的相同方法名称实现方法重载。

您可以从以下网站更好地了解方法重载的详细概念:

http://www.dotnetperls.com/overload

http://csharpindepth.com/Articles/General/Overloading.aspx

答案 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);