基类型的基类型
本文关键字:基类 类型 | 更新日期: 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