参数传递

前言

不管是值类型还是引用类型,你都可以使用ref或者out关键字
来实现参数的按引用传递。并且在按照引用类型进行传递时候,方法
的定义和调用必须显式的使用ref或者out关键字,不可以将它们省略,否则引起编译错误
在按照引用传递时,不管参数是值类型还是引用类型,本质都
是一样的,都是通过ref或者out告诉编译器,方法传递的是参数地址,
而非参数本身。

参数传递种类

值传递:传递实参的拷贝,既然是拷贝那么在函数中对这个形参所作的任何动作都不会反应到原来的实参中。

引用传递:传递实参的地址(形参和实参指向同一块内存地址),那么在函数中对形参所作的任何改变都要反映到原来的实参中。

ref修饰符

表示引用的方式传递参数,实参和形参引用的都是同一个对象,改变其中的一个引用值,另一个也会改变。
传递前必须初始化,
ref修饰符在写函数和调用函数时一定要出现
public class B {
public void Print(ref int a) {
a = 20;
Console.WriteLine(a);
}
}

主函数调用
int x = 14;
B b = new B();
b.Print(ref x);

主要应用于实现交换的方法
public class C {
public void Print(ref string s, ref string s1) {
string swap = s;
s = s1;
s1 = swap;
}
}

主函数调用
string a = “hello”;
string b = “world”;
C c = new C();
c.Print(ref a,ref b);
Console.WriteLine(a);
Console.WriteLine(b);

Out修饰符

传递到方法体后,参数被清空
值必须在方法体内赋值
返回前值必须初始化,传递前可以不初始化
在调用函数时不需要赋值
在函数退出前必须赋值
public void Per(out int x) {
x = 100;
}

主函数:
int x;
c.Per(out x);
Console.WriteLine(x);

可变参数

使用params关键字,并且可变参数只能是所有参数的最后一个,即params修饰的参数必须在后面,参数类型必须一致。

个数不确定的可变参数以数组的形式传递。
public void Foo(params object[] list) {
foreach (object o in list) {
if (o.GetType() == typeof(int))
{
Console.WriteLine(o);
}
else if (o.GetType() == typeof(string))
{
Console.WriteLine(o);
}
else {

            }
           
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Glunn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值