欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

一道关于C#参数传递的面试题分析

程序员文章站 2022-07-01 17:11:02
本文实例分析了一道关于c#参数传递的面试题。分享给大家供大家参考。具体如下: 1.定义一个类mpigeon,调用一个swap交互函数,问最后实参的结果是什么 类定义:...

本文实例分析了一道关于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);
}

结果显示如下:

一道关于C#参数传递的面试题分析

结果分析:

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

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

例如:

public void swap2(object a, object b)
{
  ((mpigeon)a).name = "ronaldo";
  ((mpigeon)b).name = "rivaldo";
}

希望本文所述对大家的c#程序设计有所帮助。