Проблема здесь в том, что VB.Net поддерживает несколько способов использования параметров ByRef. Я сделал подробное объяснение типов в недавней записи в блоге
Здесь происходит то, что Me
не является присваиваемым значением. Поэтому вместо передачи Me
в качестве параметра byRef компилятор VB вместо этого передаст временный. Это широко известно как «Copy Back ByRef». Эффективно генерирует следующий код
Dim temp = Me
Initialize(temp, SomeParam)
Нет способа обойти это в случае Me
, потому что он не может быть назначен. В случае локальной переменной foo
это работает, как и ожидалось, поскольку foo
является допустимым значением ByRef.