c# 中值传递和引用传递

对象在方法间传值,传递的是对象的值,或者这个对象的引用的副本;

//首先创建一个对象
public class OrderInfo
{
    public string OrderName { get; set; }
}

//创建一个方法去改变这个对象
private void Change(OrderInfo order)
{
    order = new OrderInfo();
    order.OrderName = "Kevin";
}

//然后通过方法的调用查看变化
private void btnChange_Click(object sender, EventArgs e)
{
    OrderInfo order = new OrderInfo();
    order.OrderName = "test";
    Change(order);
    Console.WriteLine(order.OrderName); 
}

上面的结果打印出来的是 test;

原因是方法的调用传递的其实是一个对象的引用的复制,将这个副本的引用斩断后再给它赋值新的引用不会改变原来的引用的对象的值;

如果想传递原引用过去,就得使用ref 关键字:

//修改改变对象的方法
private void ChangeRef(ref OrderInfo order)
{
    order = new OrderInfo();
    order.OrderName = "KevinRef";
}

//修改调用的方法
private void btnChangeRef_Click(object sender, EventArgs e)
 {
     OrderInfo order = new OrderInfo();
     order.OrderName = "test";
     ChangeRef(ref order);
     Console.WriteLine(order.OrderName);
 }

打印结果为 KevinRef

这个时候由于ref的作用,使得对象在方法间传递是按照原引用传递的。

你可能感兴趣的:(c#)