• C#中的out,ref,params的用法讲解


    方法调用语句
    在编写程序的过程中,经常要进行方法调用,而调用方法时最关键的就是参数的使用。在C#语言中,方法只能返回一个值,要从方法中获取多个输出值,则只能通过参数来进行。但是,在通常的参数传递中,只有引用类型的参数才能实现这种功能,而对于值类型的参数,当从方法退出后,参数的值也就不再有意义。因此C#语言提供了ref、out两种新的参数声明方式,另外,还提供了parmas参数声明方式来说明变长参数列表。
    一、 ref参数声明方式
    在参数声明中使用ref关键字可以使方法赶接引用传递给它的变量,这样方法中的操作都是直接针对传递给它的变量进行的,而不是一个复制的值。因此,可以使用这种方式在方法调用时来双向传递变量。
    为了以ref方式使用参数,必须在方法声明和方法调用中明确指定ref关键字,并且变量在传递给方法前必须进行初始化。如下列代码:

     

    … Public class MyClass { //在方法声明中使用ref关键字 Public static void Method1(ref int i) {  I=0;//把参数值设置为0 } … Public static void Main() { Int myint=1;    //变量必须初始化 Method1(ref myint);  //调用方法改变变量myint的值 Console.WriteLine(myint); //此时,myint的值为0 } }

    二、 out参数声明方式 out关键字的使用方式和作用与ref关键字基本相同,也是使用方法直接引用传递给它的变量,并且对参数的修改都直接作用到对应的变量上。用户可以使用这种参数方式从方法中输出多个值。同样,这种方式要西游记在方法声明和方法调用时都必须明确的指定out关键字。Out参数声明方式不要求变量传递给方法前进行初始化,因为它只是用于输出。但是,在方法返回前,必须对out参数进行赋值。如下面的例子: … Public class Myclass {  //在方法声明中使用out关键字,该方法输出两个参数 Public static void Method1(out int x,out int y) { //为输出参数赋值 X=0; Y=0;   }   …   Public stati c void Main()   {    Int x,y;      //变量不需要初始化    Method1(out x,out y);   //调用方法获取变量的值,使用方法时也需要使用out关键字.    Console.WriteLine(“{0},{1}”,x,y);    }  }

     

    三、 params参数声明方式 params关键字用于声明可变长度的参数列表。注意,在方法声明中,params参数后面不能再有其它参数,并且方法声明中只能包含一个params参数。下面的代码演示了params参数的用法: using System; public class MyClass {  Publc static void useParams(params int [] list)  {   For(int i=0;i<list.Length;i++)    Console.Write(list[i]);   Console.WriteLine();  }  Public static void useParams2(params object[] list)  {   For(int i=0;i<list.Length;i++)    Console.Write((object)list[i]);   Console.WriteLine();  }  Public static void Main()  {   useParams(1);    //传递一个参数   useParams(1,2,3);   //传递3个参数   useParams2(1,’2’,”test”);   int[] myarray=new int[3]{10,11,12};   useParams(myarray); }  }

  • 相关阅读:
    《2019面向对象程序设计(java)课程学习进度条》
    201871010126 王亚涛 实验四 团队作业1:软件研发团队组建
    201871010126 王亚涛 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
    201871010126-王亚涛 实验二 个人项目—0-1背包问题项目报告
    20187101026-王亚涛 实验一软件工程准备-软件工程初步学习
    201871010126 王亚涛《面向对象程序设计(Java)》 课程学习总结
    201871010126 王亚涛 《面向对象程序设计 (Java)》第十七周学习总结
    201871010126 王亚涛 《面向对象程序设计 (Java)》第十六周学习总结
    201871010126 王亚涛 《面向对象程序设计 Java》 第十五周学习总结
    201871010126 王亚涛 《面向对象程序设计JAVA》第十四周学习总结
  • 原文地址:https://www.cnblogs.com/ruishuang208/p/3072630.html
Copyright © 2020-2023  润新知