using System;
2
3namespace Demo2
4{
5 /**//// <summary>
6 /// String引用类型测试
7 /// </summary>
8 public class Test
9 {
10 public static void Main(string[] args)
11 {
12 string a = "1234";
13
14 Console.WriteLine(a);
15
16 Test.Change(a);
17
18 Console.WriteLine(a);
19 Console.ReadLine();
20 }
21
22 public static void Change(string s)
23 {
24 s = "5678";
25 }
26 }
27}RT,不用ref那么就是值方式传递参数,而做参数的是string,string是引用类型,那么应该会有变化啊,怎么输出还是1234???
2
3namespace Demo2
4{
5 /**//// <summary>
6 /// String引用类型测试
7 /// </summary>
8 public class Test
9 {
10 public static void Main(string[] args)
11 {
12 string a = "1234";
13
14 Console.WriteLine(a);
15
16 Test.Change(a);
17
18 Console.WriteLine(a);
19 Console.ReadLine();
20 }
21
22 public static void Change(string s)
23 {
24 s = "5678";
25 }
26 }
27}RT,不用ref那么就是值方式传递参数,而做参数的是string,string是引用类型,那么应该会有变化啊,怎么输出还是1234???
{
/**/
/// <summary>
/// String引用类型测试
/// </summary>
public class Test
{
public static void Main(string[] args)
{
string a = "1234"; Console.WriteLine(a); Test.Change(ref a); Console.WriteLine(a);
Console.ReadLine();
} public static void Change(ref string s)
{
s = "5678";
}
}
}
{
Student s1=new Student();
Student s2=new Student();
s1.Age=18;
s2=s1;
s2.Age=20;
Console.WriteLine("s1={0},s2={1}",s1,s2);
}
其中,Students是一个学生类,有姓名,性别,年龄等属性
那这个输出时候s1和s2都是20了
这怎么回事??
23 {
24 s = "5678";
25 } 就拿这段代码来说,方法中s="5678",改变了s这个引用自身,然而这个引用却是传值过来的,是在调用处由引用a复制得来,这个方法执行完毕之后,它就被抛弃了。而a并无任何变化。
虽然我也走过弯路.............
只是希望大家,
不要再把缪误,
在CSDN里再传播了,
............http://topic.csdn.net/u/20090729/21/dfd14ead-b6a8-4f0d-a91e-b3c6f088fc11.html
一个是传递的引用,别人可以引用这个变量,可以读也可以写,但是不可改变原值(因为你得到了只是个引用而已)
OUT和REF就是传指针,这样Change过程中的S就和MAIN中的S都是指向同样的一个内存地址,其实一个有修改,那么另外一个也会被修改为新的,就是说其中一个改了以后,会新建一个内存空间来存放修改后的值,然后Change和MAIN中的S也改为指向新的内存地址(为什么是新建而不是直接修改原来的内存,是因为STRING类型是只读的)不知道这样说对不对