1.在传送值类型时: 在传送参数给方法的时候,对于值类型的参数,在方法里面对参数所做的所有修改,在方法结束后不会改变原来的值(就是传值)。如果前面加上ref的话,方法结束后,所做的修改会改变原来的值(就是传引用)。
calss Test ... {
public void NoRef(int i)
...{
i = 102;
}
public void Ref(ref int i)
...{
int i =200
}
static void Main()
...{
int i = 100;
NoRef(i);
Console.Write(i);//结果是100
Ref(i);
Console.Write(ref i);//结果是200
}
}
2. 传送引用类型: 对于这个大家就比较好奇了,在值类型里面本来就是传引用,用不着加ref,加了它有什么用 呢。我也是刚知道。看下面代码吧
class
People
... {
int age = 30 ;
}
class Test1
... {
public void NoRef1(People p)
...{
p.age = 40;
}
public void NoRef2(People p)
...{
p = new People()
p.age = 50;
}
public void Ref(ref People p)
...{
p = new People()
p.age = 60;
}
static void Main()
...{
People p =new People();
NoRef(P);
Console.Write(p.age);//40
NoRef2(P);
Console.Write(p.age);//40
Ref(out P);
Console.Write(p.age);//60
}
}
... {
int age = 30 ;
}
class Test1
... {
public void NoRef1(People p)
...{
p.age = 40;
}
public void NoRef2(People p)
...{
p = new People()
p.age = 50;
}
public void Ref(ref People p)
...{
p = new People()
p.age = 60;
}
static void Main()
...{
People p =new People();
NoRef(P);
Console.Write(p.age);//40
NoRef2(P);
Console.Write(p.age);//40
Ref(out P);
Console.Write(p.age);//60
}
}
在没有使用ref的情况下,在方法里面new 一个对象,这个对象的值就不会影响到原来的值。如果使用了ref,new完以后所做的修改,还是会影响原来的值。
3 。out 的用法基本上和ref差不多,所不同的是,用out 的时候,传入的参数可以不初值化。