可能重复:
C# 4: conflicting overloaded methods with optional parameters
我只进行了一项小型研究并创建了下一个代码。
namespace Test { class Program { public interface ITestA { void MethodA(int a, int b); } public class TestAClass : ITestA { public void MethodA(int a, int b) { Console.WriteLine("MethodA with param"); } public void MethodA(int a, int b, bool logic = true) { Console.WriteLine("MethodA logic with param"); } } public interface ITestB { void MethodA(int a, int b, bool logic = true); } public class TestBClass : ITestB { public void MethodA(int a, int b) { Console.WriteLine("MethodB with param"); } public void MethodA(int a, int b, bool logic = true) { Console.WriteLine("MethodB logic with param"); } } static void Main(string[] args) { var testA = new TestAClass(); testA.MethodA(1, 1); var testB = new TestBClass(); testB.MethodA(1, 1); } } }
我有一个问题,为什么编译器总是选择带有2个参数的短方法。当然,所有这些都以相同的方式工作,没有接口。
由于
答案 0 :(得分:2)
这归结为编译器如何处理命名参数和可选参数 请查看this article at MSDN以获取更多信息,尤其是段落重载决策。
如果两个候选人被判断为同样好,则优先选择没有可选参数的候选人,其中参数在调用中被省略。这是对具有较少参数的候选者的重载分辨率的一般偏好的结果。
这就是为什么在你的情况下编译器选择没有任何可选参数的方法。
答案 1 :(得分:1)
因为编译器找到一个与调用方法完全对应的方法并使用它 如果第一种方式失败,编译器会搜索其他合适的方法......