Подтвердить что ты не робот

Какая разница между параметрами "var" и "out"?

Какая разница между параметрами, объявленными с помощью var и объявленными с помощью out? Как компилятор обрабатывает их по-разному (например, генерируя другой код или изменяя, какие диагностические данные он выдает)? Или различные модификаторы просто позволяют программисту документировать предполагаемое использование параметров? Какое влияние оказывают типы параметров на этот вопрос?

4b9b3361

Ответ 1

A var параметр будет передан по ссылке и что он.

Параметр out также передается по ссылке, но он предположил, что входное значение не имеет значения. Для управляемых типов (строки, интерфейсы и т.д.) Компилятор будет применять это, очищая переменную до начала процедуры, эквивалентную записи param := nil. Для неуправляемых типов компилятор реализует out идентично var.

Обратите внимание, что очистка управляемого параметра выполняется на сайте вызова, поэтому код, сгенерированный для функции, не изменяется с параметрами out или var.

Ответ 2

Для компилятора нет большой разницы. Для этого см. Мейсон.

Семантически существует большая разница:

  • var сообщает программисту, что подпрограмма может работать с ее текущим значением,
  • out сообщает программисту, что подпрограмма игнорирует/отбрасывает текущее значение.

Ответ 3

Немного поздно, но только для записи, я наткнулся на случай, когда var или out сделал большую разницу.

Я работал над веб-службой SOAP, которая экспортировала следующий метод:

function GetUser( out User :TUser ) :TResult;

который импортировался в С# в качестве эквивалента

function GetUser( out Result :TResult) :TUser;

когда я изменил out на var, он импортировал его правильно.

Я предполагаю, что вызов Delphi SOAP рассматривает результат функции как параметр out, а наличие двух параметров out смущает подпрограммы Delphi SOAP. Я не уверен, есть ли временное решение, позволяющее использовать параметры out.