Функция массива Visual Basic (Visual Studio)

Хотелось бы понять, можно ли поместить в массивы 3 отдельные функции, как в примере:

Public Class Form1

Dim Data_Out As Integer

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    'Attention 
    'These instructions are not true, they are only used to explain the problem!

    'Array funciont:

    'Process(2) as Function

    'Process(0) = Function_A
    'Process(1) = Function_B
    'Process(2) = Function_C

End Sub

Private Sub Function_A(Data_A As Integer, Data_B As Integer)

    Data_Out = Data_A + Data_B

End Sub

Private Sub Function_B(Data_A As Integer, Data_B As Integer)

    Data_Out = Data_A - Data_B

End Sub

Private Sub Function_C(Data_A As Integer, Data_B As Integer)

    Data_Out = Data_A * Data_B

End Sub

End Class

Хотелось бы понять, возможно ли это сделать.

Инициализируйте переменную в массиве и «перенесите» одну функцию с ее параметрами.

Все 3 функции имеют одинаковые и не разные входные параметры.

Можно ли это сделать?

Можно ли это сделать с помощью функций с разными входными параметрами?

Спасибо вам и всем за помощь!

Я пытался поискать в сети, но ничего не нашел. :(

Ваш вопрос не может быть о VBA и Visual Studio. Я предполагаю, что ваш язык — VB.Net. Пожалуйста, установите теги соответствующим образом. Если ваш вопрос касается не только VStudio 2012 (кстати, довольно старой версии), удалите этот тег.

FunThomas 10.07.2024 14:07

VB.NET Function должен Return передавать данные. Создание переменной уровня класса и манипулирование ею в нескольких подсистемах/функциях обязательно приведет к ошибкам.

HardCode 10.07.2024 17:30
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Одним из наиболее распространенных применений делегатов является обработка событий. Событие — это, по сути, собрание делегатов. Регистрация обработчика событий включает в себя создание делегата для метода, который будет обрабатывать событие, и передачу его объекту, который вызывает событие. При возникновении события вызывается каждый делегат и выполняются обработчики событий.

В вашем случае вы можете сделать это:

Dim methods(2) As Action(Of Integer, Integer)

methods(0) = AddressOf Function_A
methods(1) = AddressOf Function_B
methods(2) = AddressOf Function_C

methods(0)(2, 3)

MessageBox.Show(Data_Out.ToString())

methods(1)(2, 3)

MessageBox.Show(Data_Out.ToString())

methods(2)(2, 3)

MessageBox.Show(Data_Out.ToString())

Вы увидите, что каждый метод будет выполняться по очереди. Вы даже можете разместить точки останова на этих методах, чтобы увидеть их выполнение в отладчике.

Платформа уже содержит множество типов делегатов, и вы также можете определить свои собственные, но в большинстве случаев проще всего использовать делегат Action или Func. Вы используете Action для методов, которые не возвращают значение, т. е. Sub, и Func для методов, которые возвращают значение, т. е. Function. Оба могут иметь до 16 параметров универсального типа, поэтому могут поддерживать методы с количеством параметров до 16. В приведенном выше примере ваши методы не возвращают значение и имеют два параметра типа Integer, поэтому я использовал Action(Of Integer, Integer). Если, например, вы имели дело с методами с параметрами типа Double, Integer и String, возвращающими Boolean, вы бы использовали Func(Of Double, Integer, String, Boolean). И т. д.

Я предлагаю вам немного почитать о делегатах в целом. Лямбда-выражения также создают делегаты, но они создают делегаты для анонимных методов, а не для именованных методов. Они часто используются в LINQ, а также и в других местах.

Спасибо! Я ответил вам ниже! Я не могу заставить код работать с помощью оператора Func.

MizzardNet7 Net7 10.07.2024 18:34

@MizzardNet7Net7 Func(Of Integer, Integer, Integer). Подпись включает тип возвращаемого значения и типы аргументов.

djv 10.07.2024 18:39

@MizzardNet7Net7, пожалуйста, потратьте некоторое время в Справочном центре, чтобы узнать, как работает этот сайт. Это сайт вопросов и ответов, а не форум. Вы задаете один вопрос, а затем люди дают на него ответ. Вы не публикуете ответ в ответ на ответ. Если требуется обсуждение, вы оставляете комментарий к ответу и, если это необходимо. обновите свой вопрос. Вы говорите: «Я попробовал, и это работает», а это означает, что этот ответ касается вопроса, который вы на самом деле задали, поэтому примите его и двигайтесь дальше. Если у вас появился новый вопрос, опубликуйте его как новый вопрос, а не как ответ на этот вопрос.

jmcilhinney 10.07.2024 18:42

Другие вопросы по теме