我正在阅读一段让我停在某行的代码:
List<object> props = new List<object>();
DoWork(param1, param2, props);
//props.Count grew up
我以为在其范围之外更改变量需要将其作为out
or传递ref
,但后来我意识到除非该DoWork
方法更改props
引用,例如:
props = new List<object>();
引用将指向同一位置。所以这里没有必要使用ref
。
然后我创建了一个string
类型的方法:
static void ChangeMe(string str)
{
str = "W77";
}
public static void Main(string[] args)
{
string str = "p1";
ChangeMe(str);
//str is still "p1"
}
如果行为促使 List 在其范围之外更改是它的引用类型,string
那么如果它没有在被调用方方法中重新分配并且它是一个引用类型,为什么不改变List<object>
?
原因是因为它string
是C# 中的不可变类型,因此每当您“更改”它时,您实际所做的就是string
使用新值创建一个新值并引用它。
调用时ChangeMe
会创建对同一字符串的新引用。然后在该方法中,您将新引用引用到一个全新的字符串,它不会影响Main
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句