我有以下代码段。当我将字符串strMain传递给foo方法并打印它然后我得到" main" string,如果string是引用类型,那么为什么它打印" main"不是"当地"。当我通过使用ref关键字传递它做同样的事情然后它工作。 string是引用类型,那么为什么它需要ref关键字。
void main()
{
string strMain="main"
foo(string str);
Console.WriteLine(strMain);
}
void foo(string strFoo )
{
strFoo="Local";
}
答案 0 :(得分:1)
这样做的原因是你按值传递strFoo
,而不是通过引用。将strFoo
内的foo
重新分配给新的string
不会对来自strMain
的{{1}}产生任何影响。这不是main
特有的:C#中的所有引用类型都以这种方式工作。
如果您想在string
中显示foo
中的作业,请通过引用传递您的字符串:
main
请注意,按值传递引用类型允许调用的方法更改传递的变量的值,只要该变量是 mutable 即可。这不能用public void Main(string[] args) {
string strMain="main";
Foo(ref strMain);
Console.WriteLine(strMain);
}
void Foo(ref string strFoo) {
strFoo="Local";
}
来完成,因为它是不可变的,但您可以使用string
执行此操作:
StringBuilder
以下是插图: