为什么局部方法只能有void返回类型?

9

为什么局部方法只能具有void返回类型的原因/逻辑/障碍是什么?

谢谢。


你如何期望一个具有非 void 返回类型的部分类方法工作?它们应该返回 default(T) 还是什么? - CodesInChaos
3个回答

13

Partial methods(局部方法)旨在如果您没有为其提供实现,则可以将它们省略。编译器会删除未实现的部分方法的调用。

这也强调了它们为什么不能返回任何内容的原因: 如果您依赖于返回值而没有实现这个部分方法,那怎么办呢? 您将得到未初始化的结果,尽管代码明确显示了一个赋值语句。

同样地,使用Conditional属性的方法也只能返回void,原因是方法调用可能存在于已编译的IL中,也可能不存在。


终于通过你的帖子理解了。在其他地方找答案很困难。谢谢! - ckv
如果没有实现,抛出编译错误有什么问题吗? - AustinWBryan
如果你这样做,可能会在生成的代码中出现编译错误。或者代码生成器必须有效地执行编译器的工作,通过查看你的所有代码来确定你是否有部分方法的实现,以便潜在地省略对它的调用。 - Joey
@Joey 我明白了。我想这有点遗憾,因为我认为这可以用来模仿C++的.cpp/.h文件,你可以使用.h作为“目录”,快速查看类,并在那里放置xml注释,这样你就不必在实现文件中使用太多行注释了。 - AustinWBryan
自从2020年C# 9.0版本以来,“partial”方法不必返回“void”。编辑:我在链接的线程中写了一些参考答案。 - Jeppe Stig Nielsen

3

部分类方法的实现是可选的。

如果没有提供实现,调用仍然有效,但编译器会自动删除。只有实现了部分类方法才能将其分配给委托。

这意味着它们不应该有副作用 - 实际上没有返回值或“out”参数,它们不能是虚拟的,并且始终是私有的。

更多信息在这里


0

未实现的部分类方法在编译时被移除。编译器可以忽略对void方法的调用,因为它们只修改已经存在对象的状态。它不能移除返回对象的方法,因为那样会使代码无效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接