delphi - 如何确定接口(interface)的实现对象的类型

标签 delphi delphi-2009 typechecking dunit

我正在尝试为一个简单的工厂类编写单元测试,该工厂类创建几个可能的实现对象之一并将其作为接口(interface)引用返回。

DUnit 有一个内置过程 CheckIs(AObject: TObject; AClass: TClass; msg: string),如果对象的类基于其名称和它接受的参数,则测试应该失败类型与预期不匹配。唯一的问题是它需要对象引用而不是接口(interface)引用。

因此,我尝试使用 CheckTrue 并在测试主体中执行比较,但我不像 C# 那样熟悉 Delphi 的类型检查支持。

我知道 is 运算符是不可能的,因为它只适用于对象引用。

CheckTrue(LMyInterfaceReference {comparison here} TMyClass);

有什么建议吗?

顺便说一句,我使用的是 Delphi 2009,因此我无法访问 2010+ 中添加的新 RTTI 支持。

最佳答案

我想知道为什么你必须测试这个......也许你真的不需要。

但是,如果必须了解接口(interface)的底层对象,那么您有两种选择:

  • 向接口(interface)添加一个方法,该方法返回底层对象(只是一个 TObject),并在每个类中通过返回 self 来实现此方法。
  • 稍微修改一下,例如使用这个 Interface to object例行公事。

关于delphi - 如何确定接口(interface)的实现对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5196682/

相关文章:

python - 从 docstring 强制执行 python 函数参数类型

c++ - 如何检查 std::string 是否确实是整数?

delphi - 使按钮字形在delphi 7中具有透明背景?

delphi - 带按钮的字符串网格

c++ - 将函数名称从 C++ Dll 导出到 Delphi

multithreading - 在Delphi中,System.TMonitor.Pulse和TMonitor.PulseAll实际上做了什么

delphi - 如何使用引用泛型类型的复杂类型

Delphi:将 2009 升级到 XE?

delphi - 通用类型的大小

python - 这是在 Python 中检查类型的一个好理由吗?