2016-02-16 1 views
3

Все в теме, действительно.В чем разница между модификаторами аргументов метода ByRef и Output?

я не понимаю, что разница в поведении между этими двумя методами для x:

// first version 
Method m(ByRef x As whatever) 
{ 
    // play with x 
} 

// second version 
Method m(Output x As whatever) 
{ 
    // play with x 
} 

Там должна быть какая-то причина, почему существуют оба эти модификаторы, однако мое «мастерство» (хм) языка недостаточно, чтобы понять разницу. Я пробовал и читал документацию, искал ее и т. Д., Пока не помог.

Итак, в чем разница между этими двумя модификаторами аргументов?

ответ

7

Ну, это просто «преттеры», они не делают многого с точки зрения реального поведения на языке и используются только для предоставления документации. Идея заключается в том, что аргументы, описанные как ByRef, предоставляют как входные, так и выходные данные, например, вы можете передать отсортированный массив, а аргументы вывода предоставляют только вывод, например список ошибок. Модификатор вывода был введен позже, и многие системные коды по-прежнему используют ByRef для обоих случаев использования.

Если аргумент фактически передан по ссылке, определяется только вызывающим методом, а ключевое слово не имеет большого значения. Вы вызовете свой метод как ..m(.parameter), чтобы передать переменную по ссылке, и ..m(parameter) передать переменную по значению.

Смежные вопросы