zoukankan      html  css  js  c++  java
  • params、ref及out(C#)

    1:Params
     
     1 public static void UseParams(params object[] list)
     2 {
     3 for (int i = 0; i < list.Length; i++)
     4 {
     5            Console.WriteLine(list[i]);
     6        }

     7    }

     8
     9 static void Main()
    10 {
    11 // 一般做法是先构造一个对象数组,然后将此数组作为方法的参数
    12 object[] arr = new object[3100'a'"keywords" };
    13        UseParams(arr);
    14
    15 // 而使用了params修饰方法参数后,我们可以直接使用一组对象作为参数
    16 // 当然这组参数需要符合调用的方法对参数的要求
    17        UseParams(100'a'"keywords");
    18
    19        Console.Read();
    20    }


    注意: 在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。
    2:Ref与Out

    using System;

    class App
    {
     
    public static void UseRef(ref int i)
     
    {
            i 
    += 100;
            Console.WriteLine(
    "i = {0}", i);
        }


     
    static void Main()
     
    {
     
    int i = 10;

     
    // 查看调用方法之前的值
            Console.WriteLine("Before the method calling: i = {0}", i);

            UseRef(
    ref i);

     
    // 查看调用方法之后的值
            Console.WriteLine("After the method calling: i = {0}", i);
            Console.Read();
        }

    }


    /**//*
    控制台输出:
    Before the method calling : i = 10
    i = 110
    After the method calling: i = 110
    */

    注意:
    1:若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
    2:传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化。
    3:属性不是变量,因此不能作为 ref 参数传递。
    4:尽管 ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的。如果尝试这么做,将导致不能编译该代码。
    5:如果一个方法采用 ref 或 out 参数,而另一个方法不采用这两类参数,则可以进行重载。
    6:Ref后可以为引用类型

    out 关键字会导致参数通过引用来传递。
    这与 ref 关键字类似。与 ref 的不同之处:
    1:ref 要求变量必须在传递之前进行初始化。
    2:尽管作为 out 参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。
    示例:与 ref 示例不同的地方只要将 ref 改为 out,然后变量 i 仅需要声明即可。
    static void Main()
    {
    //int i = 10; 改为
    int i;
    //
    }
  • 相关阅读:
    C#3.0分部份方法
    欢迎提议
    控制台关闭的特殊处理
    好头晕
    c#如何计算当月季度时间段
    CMMI定义(转)
    SQL Server 聚集索引和非聚集索引的区别
    ObjectBuilder2.0 的学习
    WaitHandle、AutoResetEvent、ManualResetEvent整理
    使用XML RPC进行远程调用
  • 原文地址:https://www.cnblogs.com/tommyli/p/1023481.html
Copyright © 2011-2022 走看看