2

有人可以解释一下ref吗?

var user = new User { Name = "MyName" };
ChangeNameToOtherName(user);      // After method call user.name is "OtherName" < confusing
ChangeNameToOtherName(ref user);  // After method call user.name is "OtherName"

var name = "MyName";
ChangeNameToOtherName(name);      // After method call name is "MyName"
ChangeNameToOtherName(ref name);  // After method call name is "OtherName"
4

1 回答 1

5

ref关键字允许您更改传递参数的引用,即直接更改参数本身。

我假设您的方法主体看起来像这样:

void ChangeNameToOtherName(User user) {
  user.Name = "Other name";
}

在这里,您传递了对 user 类型实例的引用。更改此实例的属性将修改原始实例。如果您分配一个新对象,则更改将在方法之外不可见:user = new User { Name = "Name" };

字符串在 .NET 中是不可变的,您不能修改现有实例。您只能将新实例分配给变量。但是更改实例变量引用在函数外部是不可见的(当然,除非通过ref)。

将类实例传递给函数将使用对该实例的引用来调用该函数。您可以更改实例,但不能更改对该实例的引用。

于 2013-09-22T14:24:13.797 回答