一位同事和我今天正在辩论是否有用这样的功能:
private void MyFunction(ref MyClass variable)
{
}
Run Code Online (Sandbox Code Playgroud)
我能看到的唯一优势是它允许你将变量的原始指针设置为null ...除此之外,如果你省略了ref,没有区别,对吗?
你能想到将ref字符串传递给函数的任何理由吗?
我个人更喜欢返回Tuple具有多个值的a,但基本点是给调用者多个结果.对于ref参数,额外结果可能会替换现有变量中的值.请注意,这与仅处理参数本身非常不同.例如:
public void Foo(ref StringBuilder builder)
{
builder = new StringBuilder("hello");
}
Run Code Online (Sandbox Code Playgroud)
完全不同于:
public void Foo(StringBuilder builder)
{
builder.Clear();
build.Append("hello");
}
Run Code Online (Sandbox Code Playgroud)
参数类型是引用类型还是值类型在某种程度上是无关紧要的 - 特别是在考虑不可变类型时,例如string,与上面的方法不相同的情况.