基类型的基类型

本文关键字:基类 类型 | 更新日期: 2023-09-27 17:47:21

这是我在这里的第一个问题,所以我希望我能很好地表达它,希望它不会太容易。

我有以下类SubSim,它扩展了Sim,它正在扩展MainSim在一个完全独立的类(和库)中,我需要检查传递的对象是否是一种 MainSim。因此,执行以下操作进行检查;

类型 t = 获取类型(sim);在这种情况下,sim = SubSimif (t != 空){  返回 t.BaseType == typeof(MainSim);}

显然,t.BaseType 将返回 Sim,因为 Type.BaseType 获取当前 Type 直接继承的类型。

除了必须执行t.BaseType.BaseType来获取MainSub之外,还有其他方法可以使用.NET库获取正确的类型吗?或者是否有可以重新定义以返回主类的覆盖?

提前谢谢你

基类型的基类型

有 4 种相关的标准方法:

sim is MainSim;
(sim as MainSim) != null;
sim.GetType().IsSubclassOf(typeof(MainSim));
typeof(MainSim).IsAssignableFrom(sim.GetType());

您还可以创建递归方法:

bool IsMainSimType(Type t)
 { if (t == typeof(MainSim)) return true;   
   if (t == typeof(object) ) return false;
   return IsMainSimType(t.BaseType);
 }
if (sim is MainSim)

是你所需要的一切。"is"查找继承树。

使用 is 关键字:

return t is MainSim;

"is"选项对我不起作用。它给了我警告;"给定的表达式从来都不是提供的('MainSim')类型",但是我相信,警告更多地与我们现有的框架有关。我的解决方案最终是:

return t.BaseType == typeof(MainSim)
|| t.BaseType.IsSubclassof(typeof(MainSim));
不像

我希望的那么干净,也不像你的回答看起来那么直截了当。无论如何,谢谢大家的回答。它们的简单性让我意识到我还有很多东西要学。

"is"怎么样?

http://msdn.microsoft.com/en-us/library/scekt9xw(VS.71).aspx