如果字符串在C#中是引用类型,为什么传递字符串参数会表现为值类型?

如果字符串在C#中是引用类型,为什么传递字符串参数会表现为值类型?,c#,string,visual-studio,value-type,reference-type,C#,String,Visual Studio,Value Type,Reference Type,我被以下几点弄糊涂了。如果string是C#中的引用类型,并且作为引用类型传递,那么为什么更改方法中的参数值不会导致更改原始参数中的值 当然,在方法中,引用“z”指向的值已更改为“Mike” public static void ChangeStudentName(string param) { param = "Mike"; } string z = "Bill"; ChangeStudentNa

我被以下几点弄糊涂了。如果string是C#中的引用类型,并且作为引用类型传递,那么为什么更改方法中的参数值不会导致更改原始参数中的值

当然,在方法中,引用“z”指向的值已更改为“Mike”

    public static void ChangeStudentName(string param)
    {
        param = "Mike";
    }

    string z = "Bill";
    ChangeStudentName(z);
    Console.WriteLine(z);


Output - Bill

您需要
更改学生姓名(ref string param)
。请看解释。从文章中:


不要混淆引用传递的概念和引用类型的概念。这两个概念不一样。方法参数可以由ref修改,而不管它是值类型还是引用类型。通过引用传递时,没有值类型的装箱。

当然,引用“z”指向的值已更改。
-不,没有。看见这里没有特定于
string
的内容。引用是按值传递的,与所有引用类型一样。更改参数的值不会更改参数的值。请仔细阅读。这回答了你的问题吗?不幸的是,没有一个答案能回答你的问题——包括重复的答案。这个复本的答案很差。然而,这里有一些有用的信息,这些信息并没有回答这个问题,而是简单地谈论另一个话题。另一个话题是相关的,但并没有回答这个问题。@Codingyosi这正好回答了这个问题。OP混淆了引用传递的概念和引用类型的概念。否OP没有混淆,而是询问为什么作为引用类型的字符串行为类似于值类型。@Codingyosi否,OP询问作为引用类型的字符串行为不类似于通过引用传递的字符串。它的值正在方法内部更改,但在方法外部看不到更改。