C#之实参和形参

本文探讨了值类型的特性及如何影响方法调用中的参数传递。通过具体示例解释了为何值类型的变量在方法调用后保持不变,采用比喻帮助理解这一概念。

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

1.值类型

   例如:我们定义一个函数   

static void Exchange(int x, int y)
   {
      int flag = x;
      flag = y;
      y = x;
      x = flag;
    }

其中,int x ,int y 为形参,我们可以通过如下方式进行调用函数,调用时方法名,参数个数、参数类型都要对应一致,如下

 static void Main(string[] args)
   {   
        int a = 2;
        int b = 5;
Exchange(a, b);
Console.WriteLine("a="+a.ToString()+"\r\n"+"b="+b.ToString());

}

int属于值类型所以在调用Exchange(a,b)方法的时候,程序会给a和b分别复制一个相同的a和b,然后去执行方法,当方法执行结束之后,根据GC机制,刚刚分配的地址会被清除掉,所以在执行Exchange(a,b)之后,Main方法的a和b值是没有发生变化的。方法参数为值类型时,我们把a可以理解为一个主演,Exchange方法可以理解为做一个危险事情,做这个危险事情的时候,导演为防止主演受伤,给主演找个外貌相似的替身,替代主演去完成这个危险的事情,当替身完成这个危险事情的时候,替身的状态(受伤或者没有受伤)不会改变主演的状态。

 

转载于:https://www.cnblogs.com/mengxiangzhi/p/5986313.html

### C# 中方法的形参实参概念及用法 #### 一、基本概念 在 C# 编程语言中,**形参(Formal Parameter)** 是指在定义方法时指定的参数名称。这些参数仅在方法体内有效,并且当方法被调用时会为其分配内存空间[^3]。 另一方面,**实参(Actual Parameter)** 则是在调用方法时传递的实际数据或变量。实参可以是常量、变量、表达式或其他能够提供具体值的内容[^4]。 #### 二、主要区别 1. **作用范围** - 形参的作用域局限于其所在的方法体内部。一旦方法执行完毕,形参占用的内存就会被释放。 - 实参存在于整个程序运行期间或者至少在其声明的有效范围内存在。 2. **数据流向** 数据传输是从实参形参的一次性操作。即使形参的值发生了更改,这种修改也不会影响原始实参的值(除非通过引用方式传递)[^4]。 3. **类型一致性** 在调用函数时,实参的数量、类型以及顺序必须与对应方法签名中的形参相匹配;否则编译器将报错提示“类型不匹配”。 #### 三、示例分析 下面是一个简单的例子来展示如何使用形参实参: ```csharp using System; class Program { // 定义一个带有两个整型形参的方法 static void AddNumbers(int number1, int number2){ Console.WriteLine($"Sum is :{number1 + number2}"); } static void Main(){ int firstNumber = 5; int secondNumber = 7; // 这里firstNumber secondNumber作为AddNumbers方法的实参 AddNumbers(firstNumber , secondNumber); // 输出结果将是 Sum is: 12 } } ``` 在此案例中`int number1, int number2`代表的是形参,而 `firstNumber`, `secondNumber`则是对应的实参[^2]。 #### 四、特殊情形——按引用传递 除了默认按照值的方式外,还可以利用关键字如ref,out使得形参可以直接访问并可能改变外部实参的状态。例如前面提到过的交换两数的例子就是采用了这种方式实现的[^5]: ```csharp static void Switch(ref Test x, ref Test y){ var temp = x.num; x.num = y.num; y.num = temp; } // 假设Test类已正确定义... Test objA=new Test(){num=8}; Test objB=new Test(){num=9}; Switch(ref objA, ref objB); Console.WriteLine($"{objA.num}, {objB.num}");// 结果应该是9,8 ``` 这里需要注意的是,如果希望让方法内的变动反映回原对象,则需采用上述提及的机制之一(比如这里的ref修饰符)[^5]。 #### 总结 综上所述,在C#编程环境中理解清楚什么是形参及其功能对于编写高效可靠的软件至关重要。同样重要的是掌握好何时何地应该运用不同种类的参数绑定策略以满足特定需求场景下的灵活性要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值