C# 接口重载方法行为
可能的重复:
C# 4:与可选参数发生冲突的重载方法
我刚刚一项小研究并创建了下一个代码。
命名空间测试 { 班级计划 { 公共接口ITestA { void MethodA(int a, int b); } 公共类 TestAClass :ITestA { 公共无效方法A(int a,int b) { Console.WriteLine("带有参数的方法A"); } 公共无效方法A(int a,int b,布尔逻辑= true) { Console.WriteLine("MethodA 带参数的逻辑"); } } 公共接口ITestB { void MethodA(int a, int b, bool 逻辑 = true); } 公共类 TestBClass :ITestB { 公共无效方法A(int a,int b) { Console.WriteLine("带有参数的MethodB"); } 公共无效方法A(int a,int b,布尔逻辑= true) { Console.WriteLine("带有参数的MethodB逻辑"); } } 静态无效主(字符串[]参数) { var testA = new TestAClass(); testA.MethodA(1, 1); var testB = new TestBClass(); testB.MethodA(1, 1); } } }
我有一个问题为什么编译器总是选择带有 2 个参数的短方法。当然,所有这些都以相同的方式工作,并且没有接口。
谢谢
Possible Duplicate:
C# 4: conflicting overloaded methods with optional parameters
I just have one small research and created next code.
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); } } }
I have a question why compiler always choose short method with 2 parameters. And of course all this work by the same way and without Interface.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这归结为编译器如何处理命名参数和可选参数。
请查看MSDN 上的这篇文章以获取更多信息,尤其是过载解决方案。
这就是为什么在您的情况下编译器选择不带任何可选参数的方法。
This boils down to how the compiler treats named and optional parameters.
Check out this article at MSDN for more information, especially the paragraph Overload Resolution.
This is why in your case the compiler chooses the method without any optional parameters.
因为编译器找到一个与调用方法完全对应的方法并使用它。
如果第一种方法失败,编译器会搜索其他合适的方法......
Because compiler finds a method that correspond perfectly to calling method and use that.
Compiler searches for other suitable methods if first way fails...