我知道标题可能不完全清楚,但我不想让它太长。
在考虑对部分方法施加的限制时,有一件事让我感到困惑。在我看来,规则是不一致的。你可能知道:
部分方法的返回类型必须始终为 void,并且它们不能有任何用 out 修饰符标记的参数。这些限制是存在的,因为在运行时,该方法可能不存在,因此您无法将变量初始化为该方法可能返回的值,因为该方法可能不存在。同样,您不能有 out 参数,因为该方法必须对其进行初始化,并且该方法可能不存在。[1]
这对我来说听起来很明智。但同时:
如果没有实现分部方法声明,那么您不能有任何代码尝试创建引用分部方法的委托。同样,原因是该方法在运行时不存在。[1]
起初,所有这些规则似乎都遵循相同的编译器逻辑。不过还是有区别的。如第二个引用所述,编译器仅在部分方法没有方法实现时才会发出错误。为什么它不能在其他情况下在编译时检查实现?这将在使用部分方法时提供更大的灵活性,并且所有规则背后的逻辑都是相同的。
恐怕我能得到的唯一答案是“因为它是这样实现的”,但也许还有更多的东西?
[1] CLR 通过 C#,第四版