提问人:Luchian Grigore 提问时间:8/15/2012 最后编辑:Wladimir PalantLuchian Grigore 更新时间:8/15/2012 访问量:1039
在 C 语言中向未实现的方法发出信号的惯用方式#
Idiomatic way of signaling unimplemented methods in 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 时。
评论