C# 按值和按引用传递参数

假设有一个类型 A,它有一个 int 类型的属性 X。 ChangeA 方法接收类型 A的参数, 把 X 的值改为2 :

public static void ChangeA (A a)
{
    a.X = 2;
}

// Main 方法创建类型 A的实例, 把 X 初始化为 1, 调用 ChangeA 方法

static void Main ()
{
    A a1 = new A () { X = 1 };
    ChangeA ( a1 );
    Console.WriteLine ( string.Format( "a1.X:{0}", a1.X ) );
}

这段代码会输出什么啊? 1 还是 2 ? (好好琢磨一下)

 

 

答案视情况而定,首先要确定 A 是一个类,还是一个结构。

下面先假定 A是结构:

public struct A
{
    public int X { get; set; }
}

结构按值传递。ChangeA 方法中的变量 a 得到的是一个  a1 的副本(复制一份)。 在方法 ChangeA 的最后修改,然后销毁。 a1的内容从来都没有被改变, 一直是 1.

 

我们再来假定 A是类时:

public class A
{
    public int X { get; set; }
}

类按引用传递。ChangeA 方法中的变量 a得到的是 a1的引用。 当 ChangeA 修改 a的 X属性值时, a1.X值也会改变,因为它们是同一个对象。 所以结果是 2。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值