我有一个从类'a‘继承的类'b’。在类'a‘中,有一些代码可以在事件不为空时执行操作。我需要在应用程序中的特定时间在类'b‘中触发该代码。所以在'b‘中,我订阅了一个新的处理程序(事件)。
如果我在类'b‘中的throw new NotImplementedException();
行中保留自动生成的事件’原样‘,代码就会按预期工作/运行。一旦我删除thow异常,应用程序就不再按预期工作。
那么,除了抛出异常之外,throw new NotImplementedException
还做了什么呢?
我意识到在这一点上我可能试图以错误的方式解决我的编码问题,我相信我会找到更好的方法(我仍在学习),但我的问题仍然存在。为什么这一行会改变代码的结果呢?
编辑:我意识到我的代码不是很具体。不幸的是,由于严格的政策,我不能。我在类中有一个if语句。
if (someEvent != null)
当代码“工作”时,if语句返回true。当它没有像预期的那样工作时,它会返回'false‘。在类'b‘中,应用程序’工作‘(或if语句返回true)的唯一时刻是当我在类’b‘的event方法中有throw new NotImplementedException();
行时,该方法是在我附加新事件时自动生成的。
发布于 2012-04-17 22:35:04
这只是一个异常,至于为什么它意味着你的应用程序“工作”完全依赖于处理任何异常的代码。
它不是一个“特殊的”异常,而不是一个正常的异常(除了像其他异常一样从Exception
派生)。您倾向于将它与代码生成一起视为实现它所抛出的成员的占位符。这比让代码生成为了输出编译代码而试图理解成员结构要容易得多。
当你说“不再像预期的那样工作”时,我假设它可以编译。如果删除它会阻止代码编译,那么很有可能会出现关于返回值的编译错误。
可能触发事件的代码期望来自处理程序的特定响应,或者如果没有处理程序或发生异常,它将默认响应并继续。在你的例子中,有一个处理程序,没有异常,所以它希望得到更好的响应?
完成猜测。
如果您需要在b
中使用a
中的代码,请考虑将包含代码的方法设置为protected
,如果您需要对行为执行override
操作,则可以选择使用virtual
。
发布于 2012-04-17 22:37:22
想想看:如果你想用下面的方法把两个整数相加……
private int Add(int x, int y)
{
}
...and内部没有这样做的代码(该方法甚至不返回整数)。这就是NotImplementedException
的用途。
发布于 2017-07-04 06:20:53
NotImplementedException
只是一个异常,当您想要做的事情的代码还没有编写好时,就会使用它。它通常在代码片段中用作占位符,直到您用实际代码填充生成的任何内容的正文。
使用NotImplementedException
而不是空代码块是一种很好的实践,因为它会非常明显地抛出一个错误,警告您代码的一部分还没有完成。如果它是空的,那么方法可能会运行,并且不会发生任何事情,这有时是一种痛苦的调试。
https://stackoverflow.com/questions/10193284
复制相似问题