C#代理是否像Excel /用户定义函数一样工作?

时间:2014-05-16 23:43:43

标签: c# excel function vba delegates

here about Delegates concept给出了很多很棒的问题和很棒的答案。特别是this answer was more captivating.我一直在使用VBA和早期版本的Java和C#。我试图在C#的更高版本中使用有用的和有点高级的概念进行升级,这是一件有趣和有效的事情。

在VBA中,没有必要使用用户定义的函数(UDF)使用参数加载来构建做某事的类/接口,就像一堆计算一样。我们可以在另一个 VBA函数/ sub或Excel工作表中使用UDF。

e.g。 VBA中的以下函数需要很少的参数并返回计算值

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

在理解现实世界使用中的代表方面,我搜索了很多,发现这是一个很好的讨论。但是,如果我可以将我已经知道的内容联系起来,那将会非常有用。

我在这里正确的树上咆哮吗?

2 个答案:

答案 0 :(得分:3)

抱歉,代表们不像Excel UDF一样工作。您不能将函数或子例程作为参数传递给VBA中的另一个函数。

不确定这是否会响铃,但它们看起来像C中的函数指针:用户数据类型,可以保存具有特定参数列表和明确返回类型的函数的地址;基于此,您可以存储/调用与"签名匹配的任何功能&#34 ;;它是代表允许的部分内容。

现在,在旁注中,函数指针在C中是大约。 1971年......所以代表们就像喇叭裤:回归时尚。 : - )

答案 1 :(得分:2)

此处发布此信息,以供将来在vba中实施代表的搜索者使用。

我认为你在vba中最接近的是预定义了你将要使用的主要功能#34;函数用枚举调用,然后使用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