C#学习教程:c#参数隐式转换分享


c#参数隐式转换

有这个代码:

class Program { static void Main(string[] args) { Check(3); Console.ReadLine(); } static void Check(int i) { Console.WriteLine("I am an int"); } static void Check(long i) { Console.WriteLine("I am a long"); } static void Check(byte i) { Console.WriteLine("I am a byte"); } } 

为什么这段代码打印“我是一个int”而不是“我很长”?

为什么这段代码打印“我是一个int”而不是“我很长”?

因为编译器经历了重载决策的规则,这些规则在C#5规范中,从7.5.3节开始。

这两个都是适用的函数成员 (即它们都对参数列表有效)但Check(int)方法比Check(long)方法(第7.5.3.2节)“更好”,因为参数的类型是int ,并且标识转换比扩展转换“更好”(第7.5.3.3节)。

给定从表达式E转换为类型T1的隐式转换C1,以及从表达式E转换为类型T2的隐式转换C2,如果以下至少一个成立,则C1是比C2更好的转换:

这里EintT1intT2long 。 有从intint的标识转换,但不是从intlong …因此适用此规则,并且从intint的转换优于从intlong的转换。

上述就是C#学习教程:c#参数隐式转换分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/959917.html

发表评论

邮箱地址不会被公开。 必填项已用*标注