关于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,但实际上是空的。为什么没有变化,他们引用的不都是同一个内容的吗?
展开
 我来答
FantasyChump
2008-08-05 · TA获得超过3288个赞
知道大有可为答主
回答量:2127
采纳率:0%
帮助的人:2256万
展开全部
楼主,你要首先了解一下,在.net里面,虽然字符串可以操作,但是实际上字符串一旦生成了,就不会再改变了。在JiaMi这个函数里面似乎是把MiWen给修改了,但是其实没改。

首先,MiWen传进来的只是一个指针,指向的是原字符串(YuanWen)。等使用连接进行修改的时候,其实在CLR中是根据这个原文+"abcd"重新生成了一个新的字符串,并将这个新的字符串的指针给了MiWen。现在,MiWen这个局部变量指向的是修改后的字符串,但是在Main中的MiWen这个变量的指针还是指向在修改以前的字符串,也就是"",这就出现你所说的情况。

要点如下:
1.字符串做参数,传递的是引用,只是一个指针的复制,你修改参数的指向,影响不到调用它的函数中的那个指针所指向的内容
2.字符串不可修改。你以任何一种形式修改了字符串,源字符串其实还在的,只是根据你的修改重新生成了一个新的字符串
3.如果需要修改,两种方案,一是将修改后的字符串返回;二是作参数传字符串时使用 ref 传递,这样子函数中可以直接修改掉主函数中的指针指向,从而指向新的字符串。

希望以上我辛苦打的字对你有帮助 :-)
lcg1986
2008-08-06 · TA获得超过3374个赞
知道大有可为答主
回答量:1858
采纳率:90%
帮助的人:1623万
展开全部
string一般看成值类型..虽然他是一个类..
public static void JiaMi(string YuanWen,string MiWen)
声明改成:
public static void JiaMi(string YuanWen,out string MiWen)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式