【问题标题】:When overriding a method from a parent class; what does NotImplementedException() mean?从父类重写方法时; NotImplementedException() 是什么意思?
【发布时间】:2010-02-05 00:53:52
【问题描述】:

这是一个例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SharpLibrary_MediaManager
{
    public class Picture:BaseFile
    {
        public override void GetFileInformation()
        {
            throw new NotImplementedException();
        }

        public override void GetThumbnail()
        {
            throw new NotImplementedException();
        }
    }
}

为什么这些是为我自动生成的?它们的用途是什么?我很好奇。 :)

【问题讨论】:

标签: c# .net inheritance c#-3.0


【解决方案1】:

这是 IDE 放入的内容,以便自动生成的代码能够编译。它不能放入空方法,因为可能需要返回值。通过放入异常,可达性分析器将推断通过该方法的所有路径要么返回一个值,要么抛出,因此它不会抱怨。它还用于在运行时(当您尝试执行所述方法时)提醒您需要为该方法编写主体。

您应该始终将throw new NotImplementedException(); 替换为您自己的逻辑。

我还发现NotImplementedExceptions 在进行 TDD 时非常有用。我编写了一些测试,然后我需要在我的测试类中添加一些代码,以便我的测试真正编译。我将只编写方法定义并添加一个带有throw new NotImplementedException(); 的主体(当然我为此定义了一个代码sn-p)。然后我的测试将编译并失败(红色)。然后我会真正写正文,直到我的测试通过(绿色)。然后,为了放松时间,重构时间。

【讨论】:

  • 啊哈!所以它被放在那里只是作为一个后备。 “以防万一您忘记输入内容,我们会处理的。”杰出的! :D
【解决方案2】:

这是存根代码。你需要改变它来做真正的工作,但它仍然会在你做之前编译。如果您调用该方法,代码只会抛出错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2013-03-29
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 2016-11-07
    相关资源
    最近更新 更多