Работают ли делегаты C # как функции Excel / User Defined?

1

Есть множество замечательных вопросов и замечательных ответов, которые приводятся здесь о концепции делегатов. В частности, этот ответ был более увлекательным. Я работаю с VBA и ранними версиями Java и С#. Я пытаюсь обновить с помощью полезных и немного расширенных концепций в более поздних версиях С# в качестве интереса и работы.

В VBA нет необходимости создавать классы/интерфейсы для выполнения чего-то вроде кучи вычислений с использованием нагрузки параметров с использованием пользовательской функции (UDF). Мы можем использовать UDF в другой функции VBA/sub или в листе Excel.

например, следующая функция в VBA принимает несколько параметров и возвращает вычисленное значение

Private Function DoSomeCalc(ByRef x as long, ByRef n as int, _ 
                            ByRef type as String) as long
//'--function implementation
End Function

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

Я лаю на правое дерево здесь?

Теги:
delegates
excel
function

2 ответа

3

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

Не уверен, что это звонит вам, но они действительно выглядят как указатели функций в C: тип данных пользователя, который может содержать адрес функции с конкретным списком аргументов и определенным типом возврата; основанный на том, что вы можете хранить/вызывать любую функцию, которая соответствует "подписи"; это то, что позволяют делегаты, частично.

Теперь, на боковой ноте, указатели на функции расположены вокруг в C, так как прибл. 1971... поэтому делегаты похожи на джинсы с колокольчиками: снова в моде. :-)

  • 0
    У меня нет C фона. И, конечно, мы не можем передать функцию в качестве аргумента функции или подпрограмме в VBA - <<<< - это звучит как колокольчики падуба . Мы можем вызывать функции внутри функций (встроенных или определенных пользователем). Пришло время получить указатели для фоновой цели. ;)
2

Проводя это здесь для любых будущих поисковиков, желающих реализовать делегатов в vba.

Я думаю, что ближе всего вы можете войти в vba, чтобы предопределить, какие функции вы собираетесь разрешить своей "основной" функции для вызова с перечислением, а затем используйте оператор case, чтобы определить, какой из них выполнить.

Например:

Enum eDelegateFunction
    eDelF_Foo
    eDelF_Bar
End Enum

Private Function Foo(n as double) as double
    Foo = n*2
End Function

Private Function Bar(n as double) as double
    Bar = n^2
End Function

Public Function Delegator(f as eDelegateFunction, n as double) as double
    Select case f
        Case eDelF_Foo
            Delegator = Foo(n)
        Case eDelF_Bar
            Delegator = Bar(n)
    End Select
End Function
  • 0
    +1, и это, безусловно, хорошая ссылка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню