首页 新闻 会员 周边

string作参数,是传值 还是传引用

0
悬赏园豆:5 [待解决问题]
    class Program
{
static void Swap(string a, string b)
{
string c = a;
a = b;
b = c;
}

static void Main(string[] args)
{
string str1 = "Jenny";
string str2 = "Benny";


Swap(str1, str2);

Console.WriteLine(str1);
Console.WriteLine(str2);
Console.Read();

}
}

为虾米2个字符串的值没有交换过来捏, string是引用类型呀

c#
夏小莫的主页 夏小莫 | 初学一级 | 园豆:136
提问于:2011-12-27 17:48
< >
分享
所有回答(8)
0

是传值,传参的时候string前面加个ref就是引用啦

ERS | 园豆:728 (小虾三级) | 2011-12-27 18:04
0

string是一个特殊的引用类型。

悟行 | 园豆:12559 (专家六级) | 2011-12-27 18:13
0

应用上,string类型表现为值类型语义,内存上,string类型实现为引用类型,存储在托管堆中。
楼主要是还是不明白,那推荐一本书<你必须知道的.net> 如此特殊:大话string
这个章节将的很清楚 而且这本书都是讲底层的 应该比较符合楼主的胃口
希望对你有帮助

唯吴独尊 | 园豆:707 (小虾三级) | 2011-12-27 20:52
0

确实是传的值,string这个引用类型和值类型很类似.

Learning(C#) | 园豆:23 (初学一级) | 2011-12-28 09:24
2

string 是特殊的引用类型

由上面可以看出;调用swap函数 之后,str1 和 str2 各自指向的值都没有发生变化

Survival.Sun | 园豆:267 (菜鸟二级) | 2011-12-28 09:29
0

这个不是类型的问题,而是参数传递方式的问题。你的方法属于按值传递,只传递参数的副本,要想实现值的交换就要按引用传递,这样传递的是参数的内存地址,可以使用ref或者out。

        static void Swap(ref string a,ref string b)
{
string c = a;
a = b;
b = c;
}

Swap(ref str1, ref str2);这样就能实现了。

yanzhe | 园豆:213 (菜鸟二级) | 2011-12-28 13:16
0

解决问题看 yanzhe 仁兄的答复就好了。

但是要对.NET string完整的理解,还得去查一查string”拘留池“概念。

.NET字串拘留池


胡屯 | 园豆:714 (小虾三级) | 2011-12-28 14:43
1

你的方法写的有问题。。。

Rookier | 园豆:652 (小虾三级) | 2012-01-17 10:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册