C#:如何从基类中获取派生类型的名称

45

在调试会话中,对于我来说,识别特定实例的调试信息中的实际派生类名称非常重要。

我尝试使用this.GetType().Name,但这只返回base类的类型。

有没有一种简单的方法可以从基类中获取派生类的类型?

4个回答

66

this.GetType().Name 应该可以正常工作。我认为在您的情况下,可能没有派生类。如果它返回基类名称,则不应具有派生类。

在以下情况下使用此方法:

  1. 基类 - 输出基类名称
  2. 派生类 - 输出派生类名称
  3. 将派生类转换为基类 - 输出派生类名称
  4. 将派生类传递给接受基类参数的函数 - 输出派生类名称

15

this.GetType().Name 总是返回当前执行类型的名称,而不是编写它的代码的类型。但你可以使用 Debugger.Break() 来以有条件的方式模拟断点:

if (this.GetType().Name == "Problematic type")
    System.Diagnostics.Debugger.Break();

2
在调试会话期间...
请记住,不要暂停会话以添加一些临时代码,然后重新编译和重新启动,而是可以使用调试器,在触发断点后通过它进行推算...
通过利用调试器的即时窗口,输入有关该实例的this.GetType().Name并按Enter,将显示出来。
请参阅VS文档:Immediate Window 是否有一种简单的方式可以从基类中获取派生类的类型?
是的,例如我可以使用GetTypeName属性,并实时确定异常是什么。

enter image description here


0

在引发事件时,请确保将真实的发送者传递给发送者属性。监听类中的发送者对象应正确指向引发事件的子类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接