C#代表像Excel / User Defined函数一样工作吗?

这里有一些很好的问题和关于代表概念给出的真棒答案。 具体来说, 这个答案更令人着迷。 我一直在使用VBA和早期版本的Java和C#。 我正在尝试在C#的更高版本中使用有用的和位高级的概念进行升级,作为感兴趣的工作。

在VBA中,没有必要使用用户定义的函数(UDF)来构build类/接口来执行类似于使用参数加载的一堆计算。 我们可以在另一个VBA函数/子文件或Excel工作表中使用UDF

例如VBA中的以下函数只需要很less的参数并返回一个计算值

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

在了解现实世界使用的代表方面,我search了很多,发现这是一个很好的讨论。 但是,如果我可以把我已经知道的事情联系起来,那将会非常有帮助

我在这里吠叫正确的树吗?

对不起,但代表不像Excel Excel UDFs那样工作。 您无法将函数或子例程作为parameter passing给VBA中的另一个函数。

不知道这是否给你敲响了警钟,但是它们看起来像C中的函数指针:一个用户数据types,它可以用一个特定的参数列表和一个确定的返回types来保存一个函数的地址; 基于此,您可以存储/调用与“签名”匹配的任何函数; 这是代表们部分允许的。

现在,请注意,函数指针大约在C左右。 1971年,所以代表们就像钟罩牛仔裤:回到时尚。 🙂

在这里发布这个任何未来的search者在vba实现代表。

我认为最接近你可以进来的VBA是预先定义哪些函数,你会让你的“主”function调用一个枚举,然后使用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 
Interesting Posts