gpt4 book ai didi

c# - 方法参数是否引用

转载 作者:行者123 更新时间:2023-12-02 21:49:25 25 4
gpt4 key购买 nike

有人可以解释一下吗,当我明确使用 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"

最佳答案

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

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

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

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

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

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

关于c# - 方法参数是否引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18944779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com