本文实例分析了一道关于C#参数传递的面试题。分享给大家供大家参考。具体如下:
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"; }
希望本文所述对大家的C#程序设计有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。