参考&超载方法

时间:2018-01-25 09:45:23

标签: c#

以下方法如何不被视为过载

public void SampleMethod(out int i) { }
public void SampleMethod(ref int i) { }

以下方法如何被视为过载。你能解释一下吗?

public void SampleMethod(int i) { }
public void SampleMethod(ref int i) { }

1 个答案:

答案 0 :(得分:4)

在IL级别,refout具有相同的签名; out是一个谎言 - 它只作为编译器提示存在,让你逃脱某些自由:它在掩码中真的是ref。实际上,您可以在IL中实现一个out方法来读取传入的值(可能没有分配一个确定的值 - 它将是它发生的任何事情,由于.locals init通常为零)。

相比之下,int iref int i有不同的签名; int i在堆栈上取int个值; ref int i托管指针指向堆栈上的int 。因此,在IL级别,这些与int ibool b不同:它们是不同的类型/签名。