在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
在理解现实世界使用中的代表方面,我搜索了很多,发现这是一个很好的讨论。但是,如果我可以将我已经知道的内容联系起来,那将会非常有用。
我在这里正确的树上咆哮吗?
答案 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