C#的参数传递,一道面试题

本文深入探讨了C#编程中类、方法及对象引用之间的交互过程,通过实例展示了如何使用Swap方法交换两个对象的引用,解释了在引用类型参数下,方法内部操作对象引用并不会改变原始对象的引用地址。进一步分析了对象引用的特性及在实际编程中的应用,旨在帮助开发者更好地理解和运用C#中的引用类型特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.定义一个类MPigeon,调用一个Swap交互函数,问最后实参的结果是什么

 

-----------类定义------------------
    public class MPigeon
    {
        public string Name { get; set; }
    }

----------交换函数---------------

        public void Swap(object a,object b)
        {
           object temp=a;
           a=b;
           b=temp;
        }

----------测试代码---------------

        private void button2_Click(object sender, EventArgs e)
        {
            MPigeon a = new MPigeon() { Name = "Black" };
            MPigeon b = new MPigeon() { Name = "White" };
            Swap(a, b);
            string ResultMsg = string.Format("a:{0},b:{1}", a.Name, b.Name);
            MessageBox.Show(ResultMsg);
        }

----------结果显示---------------

 

----------结果分析---------------

由于实参变量和形参变量都是引用类型,它们都指向内存堆中的某一对象的地址,
函数是将实参变量指向的地址值复制了一份给形参变量,由于形参变量和实参变量指向堆中同一地址
由于是复制了一份,所以实参的地址在swap函数中是没有被改变的,所以最后输出的结果,实参的值和原来是完全一样的

(注意:swap函数只是交互了一下形参的地址而已,而没有改变它们的值,如果改变了值,那实参的值也会跟着改变)

例如:

        public void Swap2(object a, object b)
        {
            ((MPigeon)a).Name = "Ronaldo";
            ((MPigeon)b).Name = "Rivaldo";

        }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值