我正在解决在基类中处理鼠标事件时遇到的问题。由于断点不能很好地解决鼠标事件的故障,我想在事件处理程序中添加一些调试输出。但是,对于我来说,在调试信息中包含实际派生类的名称非常重要,因为基类中的事件处理代码由大量派生类共享,并且只有某些派生类出现问题。
我尝试使用this.GetType().Name
,但这只是返回base
类的类型。我当然可以开始修改类,比如说,将派生类type
传递给它可以存储它的基类构造函数,但这显然只是一个临时需要的很多变化。有没有一种简单的方法从基类中获取派生类的类型?
答案 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}}属性来确定异常情况: