如何判断基类对象是否由子类实例转换而来?
判断基类引用指向的实际子类类型(C#)
针对你给出的场景,有两种常用且正确的写法来判断基类引用指向的实际子类类型,同时这种需求完全可行:
1. 使用 is 运算符(兼容类型检查)
is 运算符会检查对象是否是指定类型或其派生类型的实例,写法如下:
SubClass sc = new SubClass(); BaseClass bc = sc; if (bc is SubClass) { Console.WriteLine("bc 原本是 SubClass 的实例"); }
如果你的子类还有更深的派生类(比如 SubSubClass : SubClass),当 bc 指向 SubSubClass 实例时,bc is SubClass 也会返回 true。
2. 使用 GetType() + typeof()(精确类型匹配)
如果你需要精确匹配原始类型(排除派生类的情况),可以用 GetType() 获取对象的实际运行时类型,再和目标类型对比:
SubClass sc = new SubClass(); BaseClass bc = sc; if (bc.GetType() == typeof(SubClass)) { Console.WriteLine("bc 精确属于 SubClass 类型"); }
这种方式下,只有当 bc 的实际类型就是 SubClass(而非它的子类)时,判断才会成立。
另外注意你示例代码里的 bs 是笔误,应该是 bc。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

