2014-10-17 34 views
0

我试图将重载方法的值设置为1,但我希望原始文件保持未初始化状态。C# - 创建一个重载的方法,其中一个int使用固定值,另一个接收值

public void Method1(string string1, decimal decimal1, int int1) 
{ 
} 

public void Method1(string string1, decimal decimal1, int int1 = 1) 
{ 
} 

我收到以下错误:

> Error 2 Type 'Application1.Application' already defines a member called 'Method1' with the same parameter types 

它似乎并不像int int1 = 1。我希望int1在该方法的第二个版本中始终等于1,但首先我希望它接收用户输入的值,因此现在未初始化。

对不起,如果这之前已经问过,但经过一个小时的搜索,我发现我没有找到结果。如果我在这里遗漏任何东西,请告诉我,我会尽力给出更好的描述或更多细节。

回答

11

的问题是,你有两种方法具有相同签名。这个最简单的修复仅仅是删除第二个重载的最后一个参数,并调用第一个重载与最后一个参数的硬编码值:

public void Method1(string string1, decimal decimal1, int int1) 
{ 
    // Whatever you actually want to do here 
} 

public void Method1(string string1, decimal decimal1) 
{ 
    Method1(string1, decimal1, 1); 
} 

(如果你的两个方法并不意味着要达到同样的效果,你应该给他们不同的名字开始与)

如果你想使用可选的参数,而不是,你可以做到这一点仅仅有一个方法:

public void Method1(string string1, decimal decimal1, int int1 = 1) 
{ 
    // Whatever... 
} 

// Look ma, no second overload 
+0

对不起,我认为我不够清楚在OP中。如果用户没有为第一个值输入值,该方法的第二个版本将被使用,否则用户将提供一个值。谢谢你的帮助! – Moonpenguins 2014-10-17 14:28:49

+0

@Moonpenguins:恐怕目前还不清楚你的意思。基本上你需要选择是否需要两个重载 - 如果你这样做,你必须给他们不同的签名。 – 2014-10-17 14:32:05

+0

可选参数在c#4.0中引入,请在使用可选参数之前检查您的c#版本。 – 2014-10-17 20:19:11

7

刚刚离开参数断过载的要在固定值和初始化变量的方法体内:

public void Method1(string string1, decimal decimal1, int int1) 
{ 
} 

public void Method1(string string1, decimal decimal1) 
{ 
    int int1 = 1; 
    //Do things 
} 
相关问题