我正在努力实现一种基于我加载的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函数。
这可能吗?
感谢。
答案 0 :(得分:0)
检查此文章nameOf(C#和Visual Basic参考)
https://msdn.microsoft.com/en-us/library/dn986596.aspx
它完全符合您的要求。在此之前,String Litterals几乎是唯一的选择。
编辑:
问题是:“显然没有'NameOf'运算符,我不知道如何编写NameOf函数。”
如果我理解你的问题是正确的,那么你有一个从动态加载的DLL中获取的类列表,重点是你不知道一个类是实现了所有的钩子还是只有少数几个。
如果使用IHookable之类的接口并将所有钩子函数放在那里,则意味着所有DLL都必须实现所有钩子函数,这不是你想要的。
并且(如果我理解的话)如果列表中的第一个类没有实现钩子,则检查第二个,依此类推。因此,使用接口,您将不知道钩子是否已实现。