覆盖C#中的默认参数

覆盖C#中的默认参数,第1张

概述参见英文答案 > C# optional parameters on overridden methods                                    9个 复制真的很简单,输出很奇怪; 预期产量为“bbb bbb” 实际输出是“aaa bbb” 有没有人得到任何MSDN解释这种行为?我找不到任何东西. ((a)new b()).test();new b().test( 参见英文答案 > C# optional parameters on overridden methods9个
复制真的很简单,输出很奇怪;

预期产量为“bbb bbb”
实际输出是“aaa bbb”

有没有人得到任何MSDN解释这种行为?我找不到任何东西.

((a)new b()).test();new b().test();public class a{    public virtual voID test(string bob = "aaa ")    {        throw new NotImplementedException();    }}public class b : a{    public overrIDe voID test(string bob = "bbb ")    {        httpContext.Current.Response.Write(bob);    }}
解决方法 你为什么期待“bbb bbb”?

由于您将实例转换为a,因此第一次调用时编译器的唯一信息是带有“aaa”的版本,因此该值是使用的值.

在没有强制转换的第二个版本中,编译器可以看到“bbb”,因此该值是使用的值.

多态性会影响调用哪种方法 – 但它不会影响传递的参数.本质上,默认值由编译器(在调用站点)提供,因此您的代码实际上等同于:

((a)new b()).test("aaa");new b().test("bbb");

在编译时通过检查已解决的方法提供“aaa”和“bbb”.

总结

以上是内存溢出为你收集整理的覆盖C#中的默认参数全部内容,希望文章能够帮你解决覆盖C#中的默认参数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1259766.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存