Обучение
Модуль
Создание методов C# с параметрами - Training
В этом модуле рассматриваются параметры метода, включая типы параметров сквозного и сквозного значения. Этот модуль также охватывает необязательные и именованные аргументы.
Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если процедура объявляет параметр как ByRef, Visual Basic предоставляет код процедуры прямую ссылку на элемент программирования, лежащий в основе аргумента в вызывающем коде. Это позволяет процедуре изменить основное значение аргумента в вызывающем коде. В некоторых случаях вызывающий код может потребоваться защитить от такого изменения.
Вы всегда можете защитить аргумент от изменения, объявив соответствующий параметр ByVal в процедуре. Если вы хотите изменить заданный аргумент в некоторых случаях, но не другие, можно объявить его ByRef
и позволить вызывающему коду определить механизм передачи в каждом вызове. Это делается, заключив соответствующий аргумент в скобки, чтобы передать его по значению, или оставив его без скобок, чтобы передать его по ссылке. Дополнительные сведения см. в разделе «Как: принудительно передать аргумент по значению».
В следующем примере показаны две процедуры, которые принимают переменную массива и работают с его элементами. Процедура increase
просто добавляет один к каждому элементу. Процедура replace
назначает новый массив параметру a()
, а затем добавляет один к каждому элементу. Однако переназначение не влияет на базовую переменную массива в вызывающем коде.
Public Sub increase(ByVal a() As Long)
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
Public Sub replace(ByVal a() As Long)
Dim k() As Long = {100, 200, 300}
a = k
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " &
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " &
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
MsgBox
Первый вызов показывает "После увеличения (n): 11, 21, 31, 41". Так как массив n
является ссылочным типом, increase
может изменить его члены, даже если механизм передачи имеет значение ByVal
.
Второй MsgBox
вызов отображает "После replace(n): 11, 21, 31, 41". Так как n
передается ByVal
, replace
переменная n
в вызывающем коде не может быть изменена, назначив ему новый массив. При создании replace
нового экземпляра k
массива и назначении его локальной переменной a
, теряется ссылка на n
, передаваемую вызывающим кодом. При изменении элементов a
затрагивается только локальный массив k
.
replace
Поэтому не увеличивает значения массива n
в вызывающем коде.
Значение по умолчанию в Visual Basic — передавать аргументы по значению. Однако рекомендуется включить ключевое слово ByVal или ByRef с каждым объявленным параметром. Это упрощает чтение кода.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Обучение
Модуль
Создание методов C# с параметрами - Training
В этом модуле рассматриваются параметры метода, включая типы параметров сквозного и сквозного значения. Этот модуль также охватывает необязательные и именованные аргументы.