C# | About Parameter

1、形参与实参

1.1 形参(Formal Parameter)
  • 形参是函数或方法定义时声明的参数,也称为参数列表中的变量。
  • 形参通常用于指定函数或方法的输入,即传递给函数或方法的数据。
1.2 实参(Actual Parameter)
  • 实参是调用函数或方法时传递的参数值,也称为参数列表中的值。
  • 实参提供了函数或方法执行所需的真实数据。

2、传参方式

默认情况下,C# 中的参数按值传递给函数。 这意味着将变量的副本会传递到方法。 对于值 (struct) 类型,值的副本将传递到方法。 对于引用 (class) 类型,引用的副本将传递到方法。

2.1 按值传递参数
  • 默认的传参方式;
  • 实际上传递的是参数的副本,方法内部任何对参数的任何修改都不会调用方传递的参数。
int PassByValue(int x) {
    x = 20;
    return x;
}

void Main() {
    int value = 10;
    int result = PassByValue(value);
    Console.WriteLine(value); // 输出 10,因为值传递参数不会影响调用方
    Console.WriteLine(result); // 输出 20,因为方法内修改了参数的副本并返回了修改后的值
}

按值传递引用类型的变量:
实际上传递的是该引用(地址)的副本,而不是引用所指向的对象的副本。这意味着在方法内对引用类型的变量进行的修改会影响到调用方。
(包括包含在值类型变量中的引用类型的变量)

类实例是引用类型,而非值类型。 按值将引用类型传递给方法时,方法接收对类实例的引用的副本。 这两个变量都引用同一对象。

class Example {
    public int Value;
}

void PassByValue(Example obj) {
    obj.Value = 20; // 修改引用类型的变量
}

// 使用示例
void Main() {
    Example obj = new Example();
    obj.Value = 10;

    PassByValue(obj);
    Console.WriteLine(obj.Value); // 输出 20,因为引用类型的变量在方法内被修改
}
2.2 按引用传递参数
  • 实际上传递的是参数的引用(内存地址),方法内对参数的修改会影响调用方传递的变量;
void ModifyByRef(ref int x) {
    x = 20; // 修改引用类型的变量
}

void ModifyByOut(out int y) {
    y = 30; // 修改引用类型的变量
}

// 使用示例
void Main() {
    int value1 = 10;
    int value2;

    // 使用 ref 关键字传递参数
    ModifyByRef(ref value1);
    Console.WriteLine(value1); // 输出 20,因为 ref 参数在方法内被修改

    // 使用 out 关键字传递参数
    ModifyByOut(out value2);
    Console.WriteLine(value2); // 输出 30,因为 out 参数在方法内被赋值
}

引用参数:

将以下修饰符之一应用于参数声明,以按引用而不是按值传递参数:

  • ref:在调用方法之前必须初始化参数。 该方法可以将新值赋给参数,但不需要这样做。
  • out:该调用方法在调用方法之前不需要初始化参数。 该方法必须向参数赋值。
  • ref readonly:在调用方法之前必须初始化参数。 该方法无法向参数赋新值。
  • in:在调用方法之前必须初始化参数。 该方法无法向参数赋新值。 编译器可能会创建一个临时变量来保存 in 参数的自变量副本。

 注:类型成员不能具有仅在引用参数上不同的签名,但是,允许一个方法具有 ref、ref readonly、in 或 out 参数,另一个方法具有值传递的参数。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值