对于任何两个给定的对象,我怎样才能在运行时确定这两个对象是否实现了相同的接口?
给定一个接口IStackExchange
以及两个实现StackOverflow
的{{1}}和CodeReviewSE
类,我知道我可以这样做:
IStackExchange
因此,如果我知道将对象转换为什么接口,我可以验证它们是否实现了特定的接口。但是VBA不允许我做Dim SO As IStackExchange
Dim CRSE As IStackExchange
Set SO = New StackOverflow
Set CRSE = New CodeReviewSE
Debug.Print TypeName(SO) ' StackOverflow
Debug.Print TypeOf SO Is IStackExchange ' True
Debug.Print TypeOf SO Is StackOverflow ' True
Debug.Print TypeOf SO Is CodeReviewSE ' False
Debug.Print TypeName(CRSE) ' CodeReviewSE
Debug.Print TypeOf CRSE Is IStackExchange ' True
Debug.Print TypeOf CRSE Is StackOverflow ' False
Debug.Print TypeOf CRSE Is CodeReviewSE ' True
或TypeOf SO Is TypeOf CRSE
之类的事情。而Debug.Print TypeOf SO
在接口方面没有帮助。
如何在不对接口进行硬编码的情况下获取有关对象实现的接口的更多信息。名字呢?涉及额外库的解决方案(只要Windows> = 7附带)非常受欢迎。
我已经看过someone mention casting the objects to an IUnknown
type,但这只会有助于确定两个对象变量是否在内部引用同一个对象 - 它不会告诉任何有关已实现接口的内容。