C#自学43一C#的4种参数:一般参数,REF 参数,OUT 参数,参数数列

方法中的参数分为实际参数和形式参数,实际参数被称为实参,是在调用方法时传递的参数;形式参数被称为形参,是在方法定义中所写的参数。
一、一般参数

public int Add(int a,int b)
{
    return a+b;
}

在上面的方法定义中,a 和 b 是形式参数。在 Print 调用方法时使用如下代码:

public void Print()
{
    Add(3,4);
}

在调用 Add 方法时传递的参数 3 和 4 即为实际参数。

二、REF 参数
在 C# 语言中,方法中的参数除了定义数据类型外,还可以定义引用参数和输出参数。引用参数使用 ref 关键字定义,输出参数使用 out 关键字定义。ref参数与out参数都是传引用,在方法中对参数所做的修改都会传到调用者。区别在于,out参数不接受调用者传来参数的数据值,而是把该参数当做未赋值的参数。

引用参数在方法中使用时必须为其值,并且必须是由变量赋予的值,不能是常量或表达式。

如果需要将方法中的每一个参数都设置为 ref 类型参数,则需要在每一个参数前面加上 ref 关键字修饰。
注意:ref参数必须是可以赋值的变量

【实例 1】创建名为 RefClass 的类,在类中定义一个判断所输入整数是否为 5 的倍数的方法,并将方法中传入的整数参数定义为 ref 类型的。

根据题目要求,代码如下

class RefClass
{
    public bool Judge(ref int num)
    {
        if (num % 5 == 0)
        {
            return true;
        }
        return false;
    }
}

在 Main 方法中调用 Judge 方法,代码如下。

class Program
{
    static void Main(string[] args)
    {
        RefClass refClass = new RefClass();
        int a = 20;
        bool result = refClass.Judge(ref a);
        Console.WriteLine("验证结果是:" + result);
    }
}

执行上面的代码,效果如下图所示。
在这里插入图片描述
从该实例中可以看出,在调用带有引用参数的方法时,实际参数必须是一个变量,并且在传值时必须加上 ref 关键字。

三、OUT 参数:可以一次返回多个值
引用参数与我们平时使用的参数有些类似,但输出参数不同,输出参数相当于返回值,即在方法调用完成后可以将返回的结果存放到输出参数中。

输出参数多用于一个方法需要返回多个值的情况。需要注意的是,在使用输出参数时,必须在方法调用完成前为输出参数赋值。
out参数必须是可以赋值的变量,在调用func方法前对out参数赋不赋值都可以。

 public   class  mathClass 
  { 
    public   static   int  TestOut( out   int  iVal1,  out   int  iVal2) 
   { 
   iVal1  =   10 ; 
   iVal2  =   20 ; 
    return   0 ; 
   } 
   
   public   static   void  Main() 
  { 
    int  i, j;  //  变量不需要初始化。 
   Console.WriteLine(TestOut( out  i,  out  j)); 
   Console.WriteLine(i); 
   Console.WriteLine(j); 
  } 
  } 

结果:

0 10 20
【实例 2】创建一个 OutClass 类,在类中定义与【实例 1】类似的方法,只是在方法的参 数中增加一个输出参数,用于返回判断的结果。

根据题目要求,代码如下。

class OutClass
{
    public void Judge(int num, out bool result)
    {
        if (num % 5 == 0)
        {
            result = true;
        }
        else
        {
            result = false;
        }
    }
}

在 Main 中调用该方法,代码如下。

class Program
{
    static void Main(string[] args)
    {
        OutClass outClass = new OutClass();
        bool rs;
        outClass.Judge(20, out rs);
        Console.WriteLine(rs);
    }
}

执行上面的代码,效果如下图所示。
在这里插入图片描述
从该实例中可以看出,在使用输出参数时,必须在方法操作结束前为带输出参数的形式参数赋值。

在调用含有带输出参数的方法时,必须在传递参数时使用 out 关键字,但不必给输出参数赋值。
四、参数数列
参数数列能够使多个相关的参数被单个数列代表,换言之,参数数列就是数量不确定的变量。

   using  System; 
   
   class  Test 
  { 
   static   void  F( params   int [] args) { 
  Console.WriteLine( " # 参数: {0} " , args.Length); 
   for  ( int  i  =   0 ; i  <  args.Length; i ++ ) 
   Console.WriteLine( " /targs[{0}] = {1} " , i, args[i]); 
  } 
   
   static   void  Main() { 
  F(); 
  F( 1 ); 
  F( 1 ,  2 ); 
  F( 1 ,  2 ,  3 ); 
  F( new   int [] { 1 ,  2 ,  3 ,  4 }); 
  } 
  } 

以下为输出结果:

参数: 0

参数: 1

args[0] = 1

参数: 2

args[0] = 1
args[1] = 2

参数: 3

args[0] = 1
args[1] = 2
args[2] = 3

参数: 4

args[0] = 1
args[1] = 2
args[2] = 3
args[3]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值