C# 为什么部分方法可以使用 ref,但不能使用 out?

标签 c# partial-methods

非常简单。 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/

相关文章:

c# - 有没有办法通过反射获取类型的别名?

c# - 在 C# 中使用 SQLCommand 批量更新/插入

c# - visual studio 2017、xamarin、wcf 未连接

c# - C\C++ 内置的 dll 是否在 LabView 中实时运行

asp.net - 如何删除 ASP.NET Designer.cs 文件?

c# - 如何使用 CodeDom 添加没有实现的分部方法

c# - 使用反射检查是否已实现分部方法

c# - 如何在 C# 中创建类型化的 IEnumerable?