“抛出新的NotImplementedException();”究竟做了什么?

我有一个inheritance自’a’类的’b’类。 在类’a’中,如果事件不为null,则会有一些代码执行操作。 我需要在应用程序的特定时间内在类’b’中触发该代码。 所以在’b’中我订阅了一个新的Handler(事件)。

如果我使用throw new NotImplementedException();在类’b’中’自动’保留自动生成的事件throw new NotImplementedException(); 行,代码按预期工作/运行。 一旦我删除了thowexception,应用程序就不再按预期工作了。

那么,除了抛出exception之外,什么是throw new NotImplementedException呢?

我意识到我可能在这一点上试图以错误的方式解决我的编码问题,我相信我会找到一个更好的方法(我还在学习),但我的问题仍然存在。 为什么这一行改变了代码的结果?

编辑:我认为我对我的代码并不十分具体。 不幸的是,由于严格的政策,我不可能。 我在课堂上’a’是一个if语句。

 if (someEvent != null) 

当代码’工作’时,if语句返回true。 当它没有按预期工作时,它返回’false’。 在类’b’中,应用程序’工作’的唯一时间(或if语句返回true)是我throw new NotImplementedException(); 在我附加新事件时自动生成的类’b’事件方法中的行。

这只是一个例外,至于为什么它意味着你的应用程序“工作”完全依赖于处理任何exception的代码。

它不是一个“特殊”exception,而是一个普通的exception(除了像其他Exception一样从Exception派生)。 您倾向于将代码生成视为占位符,以实现其内部的成员。 这样做要比代码生成试图理解成员结构以输出编译代码容易得多。

当你说“不再按预期工作”时,我假设它编译。 如果删除它会阻止代码编译,那么很可能你有一个关于返回值的编译错误。

也许触发事件的代码需要处理程序的某种响应,或者如果没有处理程序或exception发生,则默认响应并继续。 在你的情况下,有一个处理程序,没有例外,所以它期望更好的响应?

完全猜测。

如果您需要在b使用代码,请考虑使用protected代码的方法,并在需要override行为时选择virtual

想一想:如果你想用以下方法添加两个整数怎么办…

 private int Add(int x, int y) { } 

…并且没有内部代码来执行此操作(该方法甚至不返回整数)。 这就是NotImplementedException的用途。

NotImplementedException是一种声明interface或基class的特定方法根本不在您的类型中实现的方法。 这是E_NOTIMPL错误代码的exceptionforms。

通常,实现不应NotImplementedException除非它是特定interface的特定支持方案。 在绝大多数情况下,情况并非如此,类型应完全实现interfaces

就它正在做什么而言。 它只是抛出exception。 很难说除非你给我们提供更多的信息,否则为什么程序会在exception情况下保持function并在没有它的情况下中断。

NotImplementedException只是一个exception,当您尝试执行的代码尚未编写时使用。 它通常在片段中用作占位符,直到您填写实际代码生成的任何内容。

使用NotImplementedException而不是空代码块是一个好习惯,因为它会非常明显地抛出一个错误,提醒您代码部分尚未完成。 如果它是空白的,那么该方法可能会运行并且不会发生任何事情,并且有时候调试很麻烦。