• ref、out和params


    值传递和引用传递

    形参:方法定义处定义的参数

    实参:方法调用时提供的参数

     

    值传递:方法传递值,值传递实参和形参都会在栈中占用内存,相互之间并不影响,而是形参限制了实参的类型,

    形参作为临时变量在调用结束后即销毁。

     

    引用传递:方法传递引用,引用传递实参和形参在堆中占用同一块内存,形参的改变会影响实参的值。

     

    例子:

     1  public static bool Test(int i,string s)
     2         {
     3             i = i + 2;
     4             s = (i + 5).ToString();
     5             return i < Convert.ToInt32(s);
     6         }
     7         static void Main(string[] args)
     8         {
     9             int j = 1;
    10             string S = "10";
    11             Test(j, S);
    View Code

    变量i是值传递,是形参,变量j是实参,i的改变并不会改变j的值

    变量s是引用传递,是形参,变量S是实参,s的改变会影响S的值,因为s和S指向同一块内存

     

    ref 和out

    代码例子

    public static bool Test(ref int i,out string s)
            {
                i = i + 2;
                //s = (i + 5).ToString();
                return i < Convert.ToInt32(s);
            }
            static void Main(string[] args)
            {
                //int j = 1;
                int j;
                string S = "10";
                Test(ref j, out S);
    View Code

    例子中有两处错误:

    1 ref参数j在方法调用前未赋值

    2 out参数在方法中为赋值

     

    params 可选参数

    定义形式:params + 数组

    位置:在所有参数之后且唯一

    传参形式:数组或用逗号隔开,参数可以零个或多个

     1  public void TestParams(ref int sum,params int [] arr)
     2  {
     3      for (int i = 0; i < arr.Length; i++)
     4        {
     5            sum = sum + arr[i];
     6        }
     7  }
     8 Calc c = new Calc();
     9 c.TestParams(ref sum, 1, 2, 3, 4, 5, 6);
    10 c.TestParams(ref sum, new int[] { 1, 2, 3 });
    View Code
  • 相关阅读:
    Android ADB的一些用法
    我想搞个python版的http代理服务器出来
    用Python创建大文件
    串口号都属于“使用中”的解决方法
    wxPython入门(二)
    Android Studio安装后不能启动的解决办法
    STC单片机不需要按电源开关下载的方法!
    最近要做的一些事情
    关于“用香蕉弹琴”的一点解释
    stc15系列单片机ISP编程失败率是相当高啊!
  • 原文地址:https://www.cnblogs.com/arvinzd/p/14157995.html
Copyright © 2020-2023  润新知