Відповіді:
Ні, out
в VB немає еквівалента ключового слова.
Однак VB автоматично ініціалізує всі локальні змінні у методі, тому ви можете використовувати ByRef
без необхідності спочатку явно ініціалізувати змінну.
Приклад:
Sub Main()
Dim y As Integer
Test(y)
End Sub
Sub Test(ByRef x As Integer)
x = 42
End Sub
(Якщо ви вивчаєте код у рамках (наприклад, Double.TryParse ), ви можете побачити <OutAttribute>
додані до параметрів, але це має значення лише тоді, коли виклик скасовано для інтеропу COM або виклику платформи.)
ByRef
параметрів. (Це не відбувається з параметрами типу значень.)
Nothing
їх, ви позбудетесь попередження, хоча це не змінить результату.
Nothing
їх. Це просто забирає багато часу, оскільки мені доводиться робити це сотні разів на великому старовинному веб-сайті. Дякую за розслідування.
Out
атрибут не еквівалентний out
ключовому слову C # .
Ні, не існує еквівалентна конструкція , яка дозволяє не инициализирован змінної бути переданий методу без попередження, але, як уже згадувалося в моєму питанні і відповіді вказавши <Out()>
атрибут на ByRef
визначення параметрів, хоча VB ігнорує його, це лікується C # як out
параметр.
Отже, я б попередньо ініціалізував посилання на змінні Nothing
та вказав <Out()> ByRef
для позначення наміру (це спрацює, якщо користувачі C # коли-небудь отримуватимуть доступ до ваших методів).
Якщо вам здається, що ви знаєте, коли ви маєте намір отримати доступ до типових параметрів Nothing
у непризначених посилальних змінних, ви можете встановити "Конфігурація попередження" "Використання змінної перед призначенням" на "Ні" на рівні проекту (Властивості проекту> Скомпілювати, і ви, ймовірно, хочете встановити Конфігурацію на "Усі конфігурації" перед тим, як змінити це налаштування), або, у VS2015 (VB.NET 14), ви можете використовувати #Disable Warning BC42030
.
C # версія
void TestFunc(int x, ref int y, out int z) {
x++;
y++;
z = 5;
}
Версія Vb.net
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
x += 1
y += 1
z = 5
End Sub
Оновлення
Як зазначено в коментарі, не забудьте заздалегідь встановити свій параметр, який буде використаний у слоті
У VB.NET у мене виникла проблема, що я викликав функцію "ref", яка передала масив назад.
Хоча компілятор позначив це попередженням, це було добре. Виправлення дуже просте і, мабуть, хороша практика програмування.
я змінив
Dim m_arr_values() as Integer
fnRetArray(m_arr_values)
до
' Even though 'Nothing' is the default value, setting it
' stops the compiler complaining.
Dim m_arr_values() as Integer = Nothing
fnRetArray(m_arr_values)
Це також допомагає при кодуванні, якщо назви змінних є описовими ...
Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger)
...
End Sub
Ви можете використовувати пропуск методом довідки у VB.NET.
Вам потрібен механізм параметрів Out в C #, оскільки він не дозволяє використовувати будь-яку змінну без ініціалізації.
VB.NET не потребує спеціального ключового слова, оскільки він автоматично робить це сам.
Просто використовуйте ByRef.
VB має атрибут, який повинен бути таким же, як і C # out, але сьогодні ви все одно отримуєте попередження, навіть якщо ви його використовуєте. Є подробиці про його фіксацію в vblang області github. https://github.com/dotnet/vblang/isissue/67 .
Object
, тому її не можна використовувати дляByRef x As Integer
параметра).