从父类重写方法时; NotImplementedException()是什么意思?

时间:2010-02-05 00:53:53

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

以下是一个例子:

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();
        }
    }
}

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

这是存根代码。你需要改变它实际做的工作,但它仍然会在你做之前编译。如果你调用那个方法,代码只会抛出一个错误。