关于C#引用类型参数传递返回的问题
classProgram{staticvoidMain(string[]args){stringYuanWen="abcd";stringMiWen="";Console...
class Program
{
static void Main(string[] args)
{
string YuanWen = "abcd";
string MiWen = "";
Console.WriteLine(YuanWen);
JiaMiClass.JiaMi(YuanWen, MiWen);
Console.WriteLine(MiWen);
}
}
class JiaMiClass
{
public static void JiaMi(string YuanWen,string MiWen)
{
MiWen += YuanWen + "abcd";
}
}
我认为的结果是MiWen变成了abcdabcd,但实际上是空的。为什么没有变化,他们引用的不都是同一个内容的吗? 展开
{
static void Main(string[] args)
{
string YuanWen = "abcd";
string MiWen = "";
Console.WriteLine(YuanWen);
JiaMiClass.JiaMi(YuanWen, MiWen);
Console.WriteLine(MiWen);
}
}
class JiaMiClass
{
public static void JiaMi(string YuanWen,string MiWen)
{
MiWen += YuanWen + "abcd";
}
}
我认为的结果是MiWen变成了abcdabcd,但实际上是空的。为什么没有变化,他们引用的不都是同一个内容的吗? 展开
展开全部
楼主,你要首先了解一下,在.net里面,虽然字符串可以操作,但是实际上字符串一旦生成了,就不会再改变了。在JiaMi这个函数里面似乎是把MiWen给修改了,但是其实没改。
首先,MiWen传进来的只是一个指针,指向的是原字符串(YuanWen)。等使用连接进行修改的时候,其实在CLR中是根据这个原文+"abcd"重新生成了一个新的字符串,并将这个新的字符串的指针给了MiWen。现在,MiWen这个局部变量指向的是修改后的字符串,但是在Main中的MiWen这个变量的指针还是指向在修改以前的字符串,也就是"",这就出现你所说的情况。
要点如下:
1.字符串做参数,传递的是引用,只是一个指针的复制,你修改参数的指向,影响不到调用它的函数中的那个指针所指向的内容
2.字符串不可修改。你以任何一种形式修改了字符串,源字符串其实还在的,只是根据你的修改重新生成了一个新的字符串
3.如果需要修改,两种方案,一是将修改后的字符串返回;二是作参数传字符串时使用 ref 传递,这样子函数中可以直接修改掉主函数中的指针指向,从而指向新的字符串。
希望以上我辛苦打的字对你有帮助 :-)
首先,MiWen传进来的只是一个指针,指向的是原字符串(YuanWen)。等使用连接进行修改的时候,其实在CLR中是根据这个原文+"abcd"重新生成了一个新的字符串,并将这个新的字符串的指针给了MiWen。现在,MiWen这个局部变量指向的是修改后的字符串,但是在Main中的MiWen这个变量的指针还是指向在修改以前的字符串,也就是"",这就出现你所说的情况。
要点如下:
1.字符串做参数,传递的是引用,只是一个指针的复制,你修改参数的指向,影响不到调用它的函数中的那个指针所指向的内容
2.字符串不可修改。你以任何一种形式修改了字符串,源字符串其实还在的,只是根据你的修改重新生成了一个新的字符串
3.如果需要修改,两种方案,一是将修改后的字符串返回;二是作参数传字符串时使用 ref 传递,这样子函数中可以直接修改掉主函数中的指针指向,从而指向新的字符串。
希望以上我辛苦打的字对你有帮助 :-)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询