[英]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.