在 C 语言中向未实现的方法发出信号的惯用方式#

Idiomatic way of signaling unimplemented methods in C#

提问人:Luchian Grigore 提问时间:8/15/2012 最后编辑:Wladimir PalantLuchian Grigore 更新时间:8/15/2012 访问量:1039

问:

我正在为 C# 应用程序构建框架,并打算留下一堆方法而不实现 - 返回虚拟值。我打算回到它们,但不想意外忘记实现其中任何一个。

我想在到达未实现的方法时发出信号,并使用虚拟值继续执行

这样做的惯用方法是什么?

C# 习语

评论


答:

0赞 Mark Walsh 8/15/2012 #1

也许通过在每个方法中抛出一个 NotImplementedException 而不实现?

要返回一个值,也许你可以使用一个模拟框架

评论

0赞 Luchian Grigore 8/15/2012
只是抛出一个异常,不。我想继续执行。
3赞 Alexander R 8/15/2012 #2

传统上,你会抛出一个存根,但这当然会终止该路径的执行。其他选项包括:NotImplementedException

只是记录它。在日志或控制台输出中插入一行。

或者,根据弹出窗口的烦恼程度,可以使用 Debug.Assert/Debug.Fail 在命中这些方法时弹出消息。

28赞 Marc Gravell 8/15/2012 #3

执行此操作的经典方法是:

throw new NotImplementedException();

调用者很清楚这一点,以后很容易找到修复(实际上,它会自动显示在某些任务列表中)。但是,如果这不是一个选项,也许:

return 0; // TODO

同样,这将自动显示在任务列表中,并且很容易找到。

如果你想要一些更明显的东西:

[Obsolete("not implemented")]
public int Foo() {
    return 0;
}

这将在调用方处显示为编译器警告,或者:

public int Foo() {
    #warning Foo not implemented
    return 0;
}

这将在方法中显示为编译器警告。

评论

1赞 johnc 8/15/2012
过时将是做到这一点的最明显方法,但我的强迫症坚持指出这在语义上尽可能不正确:)
1赞 invert 8/15/2012
选择“已过时”属性。待办事项列表很方便,但总是被忽视
1赞 Luchian Grigore 8/15/2012
我会选择“警告未实现”,这很完美。编译时显示,运行时不显示。;)
4赞 Marc Gravell 8/15/2012
@johnc绝对的!但是,这是务实有效的;p
2赞 invert 8/15/2012
语义是笨拙的。真正的编码员善于将事物用于除其设计目的之外的任何事情;
1赞 Jonas W 8/15/2012 #4

也可以使用 TODO,这将在 Visual Studio 的“任务列表”中显示。

//TODO: Finish this method
public int dummy()
{
return 0;
}

否则

throw new NotImplementedException()
0赞 lahsrah 8/15/2012 #5

由于您希望能够继续执行,因此如果方法具有返回类型,我将使用 a 并返回默认值。TODO:

默认值是可以的,只要它是会导致单元测试失败的值,但 TODO 在任务列表中非常明显,尤其是在使用 Resharper 时。