vb使用intellisense传递函数名称

时间:2016-02-09 10:29:37

标签: vb.net reflection hook

我正在努力实现一种基于我加载的DLL来覆盖函数的新方法。在这个模型中,我有一个类实例列表,从First =最高优先级到最后=最低优先级。

这些类中的任何一个都可以实现Hook函数或回调。我目前处于可以将字符串传递给函数,然后调用它的阶段 - 我的库约定如下所示:

Dim hookclasses as HooksList
Dim callable as Object

hookclasses.Add(new ClassA)
hookclasses.Add(new ClassB)
'... etc.

if hookclasses.Has("MyHookFunction", callable) then
    callable.MyHookFunction()
end if

这一切都有效,但我想通过利用Intellisense减少拼写错误。我已经考虑过将字符串弹出到包含常量字符串的类中,所以我会追求更好的东西。

理想情况下,我希望有一个实现所有钩子函数的回退类(即使它只是返回),如果语言支持它,我想做以下事情:

if hookclasses.Has(NameOf(FallbackClass.MyHookFunction), callable) then ...

显然没有'NameOf'运算符,我不知道如何编写NameOf函数。

这可能吗?

感谢。

1 个答案:

答案 0 :(得分:0)

检查此文章nameOf(C#和Visual Basic参考)

https://msdn.microsoft.com/en-us/library/dn986596.aspx

它完全符合您的要求。在此之前,String Litterals几乎是唯一的选择。

编辑:

问题是:“显然没有'NameOf'运算符,我不知道如何编写NameOf函数。”

如果我理解你的问题是正确的,那么你有一个从动态加载的DLL中获取的类列表,重点是你不知道一个类是实现了所有的钩子还是只有少数几个。

如果使用IHookable之类的接口并将所有钩子函数放在那里,则意味着所有DLL都必须实现所有钩子函数,这不是你想要的。

并且(如果我理解的话)如果列表中的第一个类没有实现钩子,则检查第二个,依此类推。因此,使用接口,您将不知道钩子是否已实现。