【发布时间】:2013-09-13 12:17:22
【问题描述】:
给定一个不同对象的集合,是否有可能找到它们共享的最具体的基类?
例如,给定具有这些类层次结构的对象...
object -> Vehicle -> WheeledVehicle -> Car -> SportsCar
object -> Vehicle -> WheeledVehicle -> Bus
object -> Vehicle -> WheeledVehicle -> MotorCycle
object -> Vehicle -> WheeledVehicle -> Tricycle -> BigWheel
object -> Vehicle -> WheeledVehicle -> Tricycle -> Green Machine
(为了好玩... http://www.wired.com/autopia/2011/03/green-machine-bike-is-a-big-wheel-for-grownups)
能不能用这个签名写一个函数...
public Type GetCommonBaseType(List<object> objects)
{
...
};
...让它返回“WheeledVehicle”?
我的想法是以某种方式为每个对象建立继承链列表,将它们反转,使它们都以“对象”开头,然后逐个检查所有列表中的匹配项。如果任何项目不匹配,那么前面的步骤是您最深匹配的基类型。
但是,由于“base”是内部成员,因此我不确定如何建立链。这是您可以使用反射来确定的吗?
【问题讨论】:
-
您可以使用
Type对象来完成您所说的工作。请参阅 MSDN:msdn.microsoft.com/en-us/library/system.type.aspx -
可以的。这并不简单,但我会花几分钟时间尝试编写一个合理的算法。
标签: c# inheritance reflection subclass