非常简单。 MSDN 声明您可以使用 ref,但不能使用部分方法。我很好奇为什么?据我了解,当代码被编译时,部分被合并,那么限制是什么? partial
除了让代码文件更清晰、更有条理(即养眼)之外,还有更多的东西吗?
引用:MSDN Article - “部分方法可以有 ref 但不能有 out 参数。”
最佳答案
您必须考虑如果未实现分部方法会发生什么情况。
然后发生的是所有对该方法的调用都被删除,就好像它们从未发生过一样。
所以对于使用 out 的方法,它看起来像这样:
stream s;
GetStream(out s);
s.Write(...);
并被编译成这样:
stream s;
s.Write(...);
不允许使用此代码,因为 s
尚未初始化。当您尝试调用变量的 Write
方法时,变量将被初始化的保证与对 GetStream
的调用相关联。
返回数据的方法也是如此。由于如果您还没有实现部分方法,整个方法调用就不会被编译,您需要考虑您可以做什么和不能做什么,并且仍然让调用它的代码有效。在out
和返回值方面,它有可能使调用代码无效或不完整,因此是不允许的。
至于ref
,这是有效的,因为调用代码已经处理了初始化:
stream s = null;
GetStream(ref s); // may be stripped out
if (s != null)
s.Write(...);
关于C# 为什么部分方法可以使用 ref,但不能使用 out?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3453197/