部分方法只能具有void返回类型这一事实背后的原因/逻辑/障碍是什么?
感谢
答案 0 :(得分:11)
如果您没有为它们提供实现,则会遗漏部分方法。编译器实际上删除了对未实现的部分方法的调用。
这也突出了为什么他们不能返回任何东西:如果你依赖一个返回值而没有实现部分方法,那么呢?尽管代码清楚地显示了作业,但你还是有一些未初始化的东西。
同样,使用Conditional属性的方法只能返回void
,原因相同。方法调用可能存在也可能不存在于编译的IL中。
答案 1 :(得分:3)
部分方法的实现是可选的。
如果未提供实现,则调用仍然有效,但编译器将以静默方式删除。委托只能分配一个实现的部分方法。
这意味着它们应该没有副作用 - 实际上没有返回值或“out”参数,它们不能是虚拟的,并且始终是私有的。
更多here。
答案 2 :(得分:0)
在编译时删除未实现的部分方法。编译器可以忽略对void方法的调用,因为它们只修改现有对象的状态。它无法删除返回对象的方法,因为这会使代码无效。