как ref и out отличаются во время выполнения?

0
задан SAIguru011 23 January 2019 в 13:00
поделиться

2 ответа

Ответ Гауравсы правильный. Разницы во времени выполнения нет.

Вы упоминаете https://www.c-sharpcorner.com/UploadFile/ff2f08/ref-vs-out-keywords-in-C-Sharp/ , в котором говорится:

И ref, и out обрабатываются по-разному во время выполнения, и они обрабатываются одинаково во время компиляции, поэтому методы не могут быть перегружены, если один метод принимает аргумент как ref, а другой принимает аргумент как out.

Автор этой статьи, вероятно, прочитал https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/out-parameter-modifier , в котором говорится:

Хотя ключевые слова in, ref и out вызывают различное поведение во время выполнения, они не считаются частью сигнатуры метода во время компиляции. Следовательно, методы не могут быть перегружены, если единственное отличие состоит в том, что один метод принимает аргумент ref или in, а другой - аргумент out.

Лично я согласен с jmoreno , который утверждает, что в MSDN следовало использовать фразу «требовать другое поведение» вместо «вызывать различие в поведении».

Не удивительно, что вы видите такое объяснение в нескольких местах. Вероятно, многие авторы, которые пытаются использовать документацию Microsoft в качестве основного источника информации, приводят такое же вводящее в заблуждение объяснение.

0
ответ дан Brian 23 January 2019 в 13:00
поделиться

Разница между ref и out заключается не в CLR, а в самом языке C #. Ref и Out отличаются тем, что «компилятору требуется разное поведение» для каждого из них. Перегрузка метода также не допускается во время компиляции.

Как вы можете видеть из кода, единственное изменение - это адресная ссылка именно этой строки (если вы установите значение 10, это будет равно 10).

IL_0002:  ldc.i4.s   20
0
ответ дан Gauravsa 23 January 2019 в 13:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: