C#中的三种参数传递

在 C# 中,有三种向方法传递参数的方式。

1.值参数:调用方法时,会为每个值参数创建一个新的存储位置,复制参数的实际值给函数的形参。

                按值传递--传递实参变量存储的内容

作用:传递信息

2.引用参数:引用参数是一个对变量的内存位置的引用,复制参数的内存位置的引用给形参。

                按引用传递--传递实参变量自身的内存地址

作用:改变数据

3.输出参数:可以返回多个值。

                按引用传递--传递实参变量自身的内存地址

作用:返回结果

输出参数与引用参数的区别

 ref 传入的变量必须初始化,但是在内部 可改可不改      (有进有出)
​ out 传入的变量不用初始化,但是在内部 必须修改该值  (只出不进)

区别1:输出参数 传递之前不需要赋值

区别2:方法内部必须为输出参数赋值

ref 的使用

//不使用 ref;
void Method(int myRefInt)
{
    myRefInt += 66;
}

int number = 1;
Method(number);
Console.WriteLine(number);
**//输出 : 1;**

原因是C#中方法的参数传递默认是值传递(value pass)。在Method方法中,myRefInt是number的值的一份拷贝,也就是1。在方法内部修改myRefInt的值,不会影响到传入的原始变量number。所以Method方法内部的:

myRefInt += 66;

只是修改了myRefInt这个局部拷贝,number仍然为初始值1。如果想要方法内部的修改反映到外部,可以使用引用传递(reference pass):

void Method(ref int myRefInt) 
{
  myRefInt += 66; 
}

int number = 1;
Method(ref number);

加上ref关键字,传递的是number的引用,这样方法内对引用的修改就会改变number本身。或者可以直接返回更新后的值:

int Method(int myInt)
{
  return myInt + 66;
}

int number = 1;
number = Method(number); 

这种情况下number会被更新为返回的值。所以结论是,C#默认值传递,如果想修改外部变量需要使用引用传递或返回更新后的值。

 

//使用ref
void Method(ref int myRefInt)
{
    myRefInt += 66;
}

int number = 1;
Method(ref number);
Console.WriteLine(number);

**//输出:67**

看到这里想必已经明白了:

  • 不使用ref的时候,函数收到的值是1,然后在Method(int myRefInt)方法中,局部变量myRefInt做了累加之后,在方法执行完成之后就已经销毁了。number的值还是1。
  • 使用ref的时候,函数Method(ref int myRefInt)值收到的是number的地址,函数中执行的myRefInt+=66;此时相当于number+=66;直接修改了number地址的值。
    那就可以等处结论了:ref是通过给方法传递值类型的参数,直接操作同一个变量的关键字。

out的用法

int number;

Method(number);

void Method(int myRefInt)
{
    myRefInt = 66;
}

Console.WriteLine(number);
//输出:0
int number;

Method(out number);

void Method(out int myRefInt)
{
    myRefInt = 66;
}

Console.WriteLine(number);
//输出:66

总结

值参数:传递信息 表示实参和形参使用的是两个不同内存中的值。所以形参值改变,不会影响实参的值。

引用参数:改变数据 表示与提供给方法的实际参数具有相同的内存位置。

输出参数:返回结果 会把方法输出的数据赋给自己,其他方面与引用参数相似。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值