繁体   English   中英

Basetype的BaseType

[英]BaseType of a Basetype

这是我在这里的第一个问题,所以我希望我能够很好地表达出来,并希望它不会太令人头疼。

我有以下类SubSim扩展了Sim ,它扩展了MainSim 在一个完全独立的类(和库)中,我需要检查传递的对象是否是一种MainSim 所以要做以下检查;

Type t = GetType(sim);
//in this case, sim = SubSim
if (t != null)
{
  return 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关键字

return t is MainSim;

'是'选项对我不起作用。 它给了我警告; “给定的表达式永远不会是提供的('MainSim')类型”,但我确实相信,警告更多地与我们现有的框架有关。 我的解决方案最终成为:

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

不像我希望的那样干净,或者像你的答案那样直截了当。 无论如何,谢谢大家的答案。 它们的简单性让我意识到我需要学习很多东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM