Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 为什么这个模棱两可的方法重载编译?_.net - Fatal编程技术网

.net 为什么这个模棱两可的方法重载编译?

.net 为什么这个模棱两可的方法重载编译?,.net,.net,今天下午,在最终迁移出.NET3.5之后,我对一组方法进行了增强,并希望向方法及其重载添加可选参数。 我发现我能够编译一个方法和它的重载,而它们可能有一个模棱两可的含义。下面是一个示例(在MonoDevelop中进行了测试,在我发现它的那一刻,我没有访问我的windows box的权限) 输出: DoSomething: DoSomething: 1/1/0001 12:00:00 AM DoSomethingElse: 1/1/0001 12:00:00 AM 12/31/9999 11:5

今天下午,在最终迁移出.NET3.5之后,我对一组方法进行了增强,并希望向方法及其重载添加可选参数。 我发现我能够编译一个方法和它的重载,而它们可能有一个模棱两可的含义。下面是一个示例(在MonoDevelop中进行了测试,在我发现它的那一刻,我没有访问我的windows box的权限)

输出:

DoSomething: 
DoSomething: 1/1/0001 12:00:00 AM
DoSomethingElse: 1/1/0001 12:00:00 AM 12/31/9999 11:59:59 PM
我知道我可以用一个命名参数
DoSomething(one:DatTime.MinValue)
调用第一个方法,但我认为上面的代码不应该编译


你知道为什么这是该语言的一个有效用例吗?

相关:这似乎不是一个太奇怪的问题。您正在使用一个
DateTime?
调用
DoSomething
,并且有一个与该签名完全匹配的特定重载。另一个重载不是完全匹配的,因此未选择它。编译器总是选择精确匹配而不是模糊匹配。是的,我认为这是有道理的,但我很好奇为什么语言允许“模糊模糊性”,我猜。在Visual Studio+ReSharper中,您会收到一条警告:“带有可选参数的方法被重载隐藏”。但不确定是否可以让编译器抛出实际警告。也许在罗斯林有一个定制的过滤器。
DoSomething: 
DoSomething: 1/1/0001 12:00:00 AM
DoSomethingElse: 1/1/0001 12:00:00 AM 12/31/9999 11:59:59 PM