这真的,真的让我很生气,所以我希望有人能给我一个合理的理由来解释为什么事情是这样的。
未实现异常。 你在拉我的腿,对吧?
不,我不会轻描淡写地说:“等一下,该方法已实现 - 它会抛出 NotImplementedException。” 是的,没错,您必须实现抛出 NotImplementedException 的方法(与 C++ 中的纯虚函数调用不同——现在这很有意义!)。虽然这非常有趣,但我的脑海里还有一个更严重的问题。
我只是想知道,在存在 NotImplementedException 的情况下,任何人都可以用 .Net 做任何事情吗?您是否希望使用 try catch 块包装每个抽象方法调用以防止可能未实现的方法?如果你捕捉到这样的异常,你到底应该用它做什么?
我看不到在不调用方法的情况下测试方法是否实际实现的方法。由于调用它可能会产生副作用,因此我无法预先进行所有检查然后运行我的算法。我必须运行我的算法,捕捉 NotImplementedExceptions 和一些如何将我的应用程序回滚到某个理智状态。
这很疯狂。疯狂的。疯狂的。所以问题是: 为什么 NotImplementedException 存在?
作为先发制人,我不希望任何人回应,“因为设计师需要将其放入自动生成的代码中。” 这太可怕了。我宁愿在您提供实现之前不编译自动生成的代码。例如,自动生成的实现可以是“throw NotImplementedException;” NotImplementedException 未定义的地方!
有没有人捕获并处理过 NotImplementedException?你有没有在你的代码中留下 NotImplementedException ?如果是这样,这是否代表了一个定时炸弹(即,您不小心把它留在了那里),还是一个设计缺陷(该方法不应该被实现并且永远不会被调用)?
我也很怀疑 NotSupportedException ......不支持?什么?如果不支持,为什么它是您界面的一部分?Microsoft 的任何人都可以拼写不正确的继承吗?但是,如果我没有为此受到太多滥用,我可能会为此提出另一个问题。
附加信息:
这是有关该主题的有趣读物。
似乎与Brad Abrams达成了强烈的共识,即“NotImplementedException 适用于尚未实现但确实应该(并且将会)实现的功能。就像您在构建类时可能会开始的那样,获取所有方法那里抛出 NotImplementedException,然后用真正的代码将它们清除掉……”
Jared Parsons的评论很弱,可能应该被忽略: NotImplementedException:当一个类型由于任何其他原因没有实现方法时抛出这个异常。
MSDN在这个主题上甚至更弱,只是声明“当请求的方法或操作未实现时引发的异常”。