C#从Inside基类中获取派生类型的名称

时间:2009-09-03 19:25:44

标签: c#

我正在解决在基类中处理鼠标事件时遇到的问题。由于断点不能很好地解决鼠标事件的故障,我想在事件处理程序中添加一些调试输出。但是,对于我来说,在调试信息中包含实际派生类的名称非常重要,因为基类中的事件处理代码由大量派生类共享,并且只有某些派生类出现问题。

我尝试使用this.GetType().Name,但这只是返回base类的类型。我当然可以开始修改类,比如说,将派生类type传递给它可以存储它的基类构造函数,但这显然只是一个临时需要的很多变化。有没有一种简单的方法从基类中获取派生类的类型?

4 个答案:

答案 0 :(得分:39)

this.GetType().Name应该有效。你可能没有派生类。

答案 1 :(得分:9)

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

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

答案 2 :(得分:1)

在举起活动时,请务必将真实发件人传递给发件人财产。侦听类中的sender对象应该正确指向引发该事件的子类。

答案 3 :(得分:1)

在调试会话期间...

记住,与其中断会话以添加一些一次性代码,然后重新编译并重新启动,在断点被击中之后,可以使用调试器来判断

通过使用调试器的this.GetType().Name并在要讨论的实例上键入Name,然后按 Enter ,将显示它。

请参阅VS文档:Immediate Window

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

是的,例如,我可以实时使用GetType的{​​{1}}属性来确定异常情况:

enter image description here