Использование PAMPRARRAY BYREF.
-
30-09-2019 - |
Вопрос
Есть ли способ использовать PAMPLARRAY BYREF? Запрет того, что это там обходной путь, который выполняет то же самое?
Я мог бы сделать несколько перегрузок, но я пытаюсь избежать уволачности.
Фон: портирование на некоторый старый код и пытаясь сохранить одну и ту же структуру как можно больше.
РЕДАКТИРОВАТЬ
Конкретный пример того, что я хочу:
У меня есть какой-код в турбобасине, что я портирую в VB.NET. Код встроен в такие функции, как
Input#1,Data$(I%,1),Data$(I%,2),Data$(I%,3)
Где вход () получает файл № 1 и считывает три части данных из него и присвоивает его трехменным переменным. Я хотел бы повторить это поведение с помощью собственной функции ввода (). Для этого, как бы я предприму в трех (или более или менее) переменных и назначаю их значениям?
В идеале я бы достиг этого, только модифицируя свое собственное определение ввода (), поэтому я могу гадить в кодовой базе как можно меньше.
Решение
Я никогда не использовал Turbobasic, но синтаксис выглядит идентичным VB6 Ввод # утверждение, Поэтому я предполагаю, что семантика также одинакова.
Этот код VB6
Input #1,Data$(I%,1),Data$(I%,2),Data$(I%,3)
Эквивалентно этому VB.Net
Input(1,Data$(I%,1))
Input(1,Data$(I%,2))
Input(1,Data$(I%,3))
Волшебник обновления VB.NET преобразует VB6 Input #
Заявление вроде этого. Я бы просто портировал код, а не реализую свою собственную функцию. Преобразование от VB6 в VB.NET требует существенных редактиций в базе кода, я ожидал, что турбобасич будет еще более требовательным.
Другие советы
Если вы не назначаете параметра на новый экземпляр массива и ожидаете, что вызывающий абонент (который передает переменную или поле), чтобы увидеть новый экземпляр, вам не нужно ByRef
.
Даже без ByRef
, Вызыватель все еще будет видеть изменения в содержании массива. (Массивы являются ссылочными типами).
Если вы не видите parameterName = something
В методе вам не нужно ByRef
.
Точка ParamArray
Параметр - пропустить его неявно созданный массив.
В таких использования, ByRef
не может иметь никакого эффекта.
В настоящее время нет способа пройти параметры посредством ссылки в VB.NET. Чтобы пройти серию указанных значений к способу, который принимает параметр, CLR заполняет массив соответствующей длины с указанным вами значениями, а затем передает этот массив в позвонитещую вами метод. Нет способа скопировать все значения из массива, который был передан и обратно в исходные переменные.
Я предполагаю, что вы портировать код от VB6, где Только Способ передачи параметров является ссылкой, но вам не должно быть никакой необходимости в этой функциональности в .NET.