代码之家  ›  专栏  ›  技术社区  ›  Jerry Nixon

确定类是否实现接口而不引用它

c#
  •  3
  • Jerry Nixon  · 技术社区  · 15 年前

    我有一个接口,叫它IJerry。现在,我在变量x中有一个类。这个类完美地实现了IJerry。问题是,这个类永远不会引用IJerry。只是 发生

    有没有办法确定类是否“实现”了一个接口,即使它没有显式引用它?

    3 回复  |  直到 15 年前
        1
  •  7
  •   James Curran    15 年前

    您必须使用反射读取接口的字段、方法和属性,然后检查类是否有这些字段、方法和属性(同样使用反射)

    或者,如果您使用的是C#4,您可以忘记IJerry,将MyClass放在一个动态变量中,然后在运行时C#发现它有被调用的方法。

        2
  •  2
  •   Hans Passant    15 年前

    实现一个接口的意义远不止这些。首先,实现方法是虚拟的,即使您不使用该关键字。事实上,你不能用那个关键字。另一方面,编译器重新排列方法以匹配接口的方法表布局。正在从声明中删除继承的接口 放心 使结果不相容。这些方法将不再是虚拟的。

    你所追求的是所谓的“动态调度”。在DLR中实现并集成到.NET 4.0和C#4.0语言中。重新发明系统反射编码并使其高效是一项重大任务。

        3
  •  1
  •   bmm6o    15 年前

    您必须使用反射来查看x是否有与IJerry上的方法匹配的方法。真正的问题是,你打算怎么处理这个答案?在版本4之前,C#不支持“duck typing”,因此为了在需要IJerry的地方使用类,您必须编写适配器代码。