Передавать функцию как параметр в vb.net?

У меня есть класс, который выполняет много похожих, но разных операций чтения/записи в файл excel. Все эти операции определены в отдельных функциях. Все они должны содержаться в одном длинном блоке кода (код, который проверяет и открывает файл, сохраняет, закрывает и т.д.). Каков разумный способ не дублировать этот код каждый раз? Проблема в том, что я не могу использовать только один метод, содержащий весь общий код, прежде чем я буду выполнять код, который отличается для каждого метода, потому что этот код должен содержаться во многих слоях if, try и для операторов общего кода.

Можно ли передать функцию в качестве параметра, а затем просто запустить эту функцию внутри общего кода? Или есть лучший способ справиться с этим?

Ответ 1

Вы также можете использовать делегат , чтобы вы могли передавать функции/подписи, имеющие определенную подпись.

Ответ 2

Фокусировка на актуальном вопросе:

Можно ли передать функцию в качестве параметра

Да. Используйте AddressOf TheMethod, чтобы передать метод другому методу. Тип аргумента должен быть делегатом, чья подпись соответствует типу целевого метода. Внутри метода вы обрабатываете параметр, как если бы это был фактический метод. Пример:

Sub Foo()
    Console.WriteLine("Foo!")
End Sub

Sub Bar()
    Console.WriteLine("Bar!")
End Sub

Sub CallSomething(f As Action)
    f()
End Sub

' … somewhere:
CallSomething(AddressOf Foo)
CallSomething(AddressOf Bar)

Как я уже сказал, фактический тип параметра зависит от сигнатуры метода, который вы хотели бы передать. Используйте Action(Of T) или Func(Of T) или пользовательский тип делегата.

Однако во многих случаях его фактическое использование интерфейса вместо делегата имеет разные классы, реализующие ваш интерфейс, и передачу объектов этих разных классов в ваш метод.

Ответ 3

Объявите свой параметр как Func(Of T) или Action(Of T).

Какой из них следует использовать, зависит от вашей подписи методов. Я мог бы дать вам более точный ответ, если бы вы дали нам один.