以下方法如何不被视为过载
public void SampleMethod(out int i) { }
public void SampleMethod(ref int i) { }
以下方法如何被视为过载。你能解释一下吗?
public void SampleMethod(int i) { }
public void SampleMethod(ref int i) { }
答案 0 :(得分:4)
在IL级别,ref
和out
具有相同的签名; out
是一个谎言 - 它只作为编译器提示存在,让你逃脱某些自由:它在掩码中真的是ref
。实际上,您可以在IL中实现一个out
方法来读取传入的值(可能没有分配一个确定的值 - 它将是它发生的任何事情,由于.locals init
通常为零)。
相比之下,int i
和ref int i
有不同的签名; int i
在堆栈上取int
个值; ref int i
将托管指针指向堆栈上的int
。因此,在IL级别,这些与int i
与bool b
不同:它们是不同的类型/签名。