例如,为什么这个方法Max(ref int x, ref int y)
不被认为是过载Max(int x, int y)
?为什么与相同out
?
这个问题预设了一个错误的前提。
Max(int x, int y)
Max(ref int x, ref int y)
Max(out int x, out int y)
都是名为的方法的重载Max
。但是,请注意,任何给定的类定义中只能出现后两者之一。根据规范§3.6:
方法的签名由以下部分组成方法的名称、类型参数的数量和类型每个形式参数的种类(值、引用或输出),按从左到右的顺序考虑。出于这些目的,出现在形式参数类型中的方法的任何类型参数不是通过其名称来标识,而是通过其在方法的类型参数列表中的序号位置来标识。方法的签名具体不包括返回类型、params
可以为最右边的参数指定修饰符,也可以为可选类型参数约束指定。
[...]
虽然out
and ref
参数修饰符被视为签名的一部分,在单一类型中声明的成员不能仅因签名而不同ref
and out
。如果两个成员以相同的类型声明,并且两个方法中的所有参数都具有相同的签名,则会发生编译时错误out
修饰符更改为ref
修饰符。出于签名匹配的其他目的(例如隐藏或覆盖),ref
and out
被视为签名的一部分并且彼此不匹配。 (此限制是为了允许 C# 程序轻松翻译为在公共语言基础结构 (CLI) 上运行,它不提供一种方法来定义仅在以下方面有所不同的方法:ref
and out
.)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)