一、C# 中的两种参数传递方式
C# 中常用的参数传递方式有两种:值传递和引用传递。理解两者的区别,是掌握方法调用、避免“改了却没生效”这类问题的关键。
二、什么是值传递
值传递是指:把参数的值复制一份传给方法,方法内部对参数的修改只作用于这份副本,方法调用结束后,外部的原始变量仍然是原来的值。
可以这样理解:值传递好比把文件复制一份,通过网络发给别人,对方可以在自己的计算机上随意修改这份副本,修改会保存在他那边,但你本机上的原文件不会发生任何变化。
三、值传递参数的语法格式
值传递参数(Value Parameter)的声明格式如下:
方法名称(参数类型 参数名称[, 参数类型 参数名称])不加任何修饰符的参数,默认就是值传递参数。
四、代码示例:交换两个整数
下面通过一个交换两个整数的例子,直观地观察值传递的效果。
using System; class Program { static void Main(string[] args) { int num1 = 4; int num2 = 8; Console.WriteLine("交换之前的字符串顺序为{0}、{1}", num1, num2); Program obj = new Program(); // 创建对象 obj.Change(num1, num2); // 调用交换方法 Console.WriteLine("交换之后的字符串顺序为{0}、{1}", num1, num2); Console.ReadLine(); } // 交换数据的方法 private void Change(int num1, int num2) { int temp; temp = num1; num1 = num2; num2 = temp; } }五、运行结果与分析
程序运行到方法中的交换语句时,两个值确实发生了交换,但方法执行完毕后,输出结果仍然是原来的4和8。
原因在于:Change方法接收到的是num1和num2的副本,方法内部的交换只影响副本,方法返回后副本被销毁,外部的原始变量从未被修改。这就是值传递的典型表现——方法中改变的值在被调用后没有起作用。
六、小结
- 值传递传递的是参数的副本,方法内的修改不会影响外部变量。
- 基本类型(如
int、double、bool)默认按值传递。 - 若希望方法内部修改能反映到外部变量,需要使用
ref或out等引用传递方式。