重载方法选择逻辑给出如下重载方法:publicstringTest(longitem){return"Testwithalongwascalled!";}publicstringTest(intitem){return"调用了int测试!";}publicstringTest(objectitem){return"测试对象被调用!";当我调用Test()时,我传递了一个像这样的短消息:shortshortValue=7;varresult=Test(shortValue);为什么值结果等于“调用了int的测试!”而不是“调用对象测试!”?为什么值结果等于“testwithint!”而不是“用对象调用测试!”?转换为int比转换为对象“更好”,因此重载int而不是“方向对象”更好-并且两者都有效,因为short可以隐式转换为int和对象。(重载要求long也可以,但转换为int也比int好。)请参阅C#LanguageSpecification的第7.5.3节了解一般的重载规则;“更好的转换”规则.3.3参见7.5。把它们都写在这里没有多大意义,因为它们很长——但最重要的方面是从int到object的转换,而不是从object到int的转换——所以到int的转换更具体,因此更好。(部件号来自C#4和C#5版本。您可以下载Word格式的C#5规范。)C#规范规则意味着编译器更喜欢将short转换为int,而不是object。我认为这是由于7.5.3.5以下规则的更好转换目标(链接到C#5规范下载,或从C#1.2在线查看等效内容)给定两种不同的类型T1和T2,如果至少出现以下情况之一,则T1是一个比T2更好的转换目标:为这种场景重写它,由于存在从int到object的隐式转换,并且没有从object到int的隐式转换,转换为int是更好的转换。以上就是C#学习教程:重载方法选择逻辑分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
