6

就像是:

  • 如果必须返回方法调用后的变量值:
  • if 可以在方法调用之前实例化使用 ref
  • if 不需要在调用前实例化

  • 如果变量的值用于返回、决定或计算方法调用中的其他值,则不要使用 ref 和 out

我得到正确了吗?你的简短指导方针是什么?

4

3 回答 3

4

对于值类型:

  • 如果您只想使用包含的值而不是在原始位置更改它,请使用默认传递方法(按值)
  • 如果您需要在原始商店中更改它,请使用 ref. 例子 :

    int a = -3;
    
    protected void EnsurePositiveValues(ref int value)
    {
        if (value < 0)
            value = 0;
    }
    

对于参考类型:

  • 如果您只需要使用实例或更改它,请使用默认传递方法(通过引用;应称为“通过引用复制”)
  • 如果您需要(重新)分配原始参考,请使用 ref。例子 :

    User u = MembershipAPI.GetUser(312354);
    
    protected void EnsureUser(ref User user)
    {
        if (user == null)
            user = new User();
    }
    
于 2009-05-22T08:58:22.493 回答
1

您还需要考虑值和引用类型。将引用类型作为参数传递给方法时,将指针传递给变量。这意味着您可以在方法内部对变量进行更改,并且它们将可用于调用该方法的代码,但是如果您将其设置为 null,您只是将指针设置为 null,并且当您使用方法返回。

于 2009-05-22T08:58:56.533 回答
0

不确定这是否真的回答了您的问题,但我发现通过 ref 传递值(使用 out 关键字)的一种很好的用法是......

int i = 0;

if (int.TryParse("StringRepresentation", out i)
{
    // do something with i which has taken the value of a the previous successful TryParse
}
于 2009-05-22T08:55:42.187 回答