The problem is that VB.Net supports several ways to use ByRef parameters. I explained the types in detail in a recent blog post
What happens here is that Me not an assignable value. Therefore, instead of passing Me as a byRef parameter, the VB compiler instead transmits temporary information. It is loosely called "Copy Back ByRef". It efficiently generates the following code
Dim temp = Me Initialize(temp, SomeParam)
There is no way around this in the case of Me , because it cannot be assigned. In the case of the local variable foo , although this works as expected, because foo is a valid ByRef value.
source share