Для времени выполнения ref
и out
довольно взаимозаменяемы, так как оба просто передают ссылку. Однако , out
имеет префикс с дополнительным атрибутом в IL:
public void y(ref int a)
public void z(out int a)
превращается в
.method public hidebysig instance void y(int32& a)
.method public hidebysig instance void z([out] int32& a)
, что позволяет компилятору C # различать два и добавляют особую семантику, которая есть у out
, а именно, что параметру out
не нужно иметь назначенное значение перед входом в метод, а должно быть присвоено значение перед выходомметод.
Напротив, ByRef
в VB предоставляет только ref
, но не дополнительную семантику out
.Там нет эквивалента out
в VB.