• C#中使用ref、out、params例子


    C#中使用ref、out、params例子  

    2010-09-1511:57:40|  分类: c#学习笔记 |  标签:ref  out  传值  传址  使用  |字号 订阅

    方法的参数传递有四种类型:传值(by value),传址(by reference),输出参数(by output ),数组参数(by array)。

    传值参数无须额外的修饰符,传址参数需要修饰符ref,输出参数需要修饰符out,数组参数需要修饰符params
    1

    public staticvoid method(string x,ref string y,out string z)

    {

    x="我是传值类型";

    y="我是传址类型,传入的参数必须先被初始化";

    z="我是输出参数,必须在方法中对我完成初始化";

    }

    static voidMain()

    {

    string a="传值类型",b="传址类型",c;

    Console.WriteLine("beforemethod call:a={0},b={1},c=未赋值",a,b);

    method(a,refb,out c);

    Console.WriteLine("aftermethod call:a={0},b={1},c={3}",a,b,c);

    }

    输出结果如下:


    可以看到a的值始终不变,bc的值改变了。

    2

           public static void bubble(int x,int y)
            {
                int temp =x;
                x = y;
                y = temp;
            }

           static void Main()
            {
                int a = 5, b= 6;
                bubble(a,b);
               Console.WriteLine("value is :a={0},b={1}",a,b);
            }

    输出结果:

     

     

          public static void bubble(ref int x,ref int y)
            {
                int temp =x;
                x = y;
                y = temp;
            }

           static void Main()
            {
                int a = 5, b= 6;
                bubble(refa,ref b);
               Console.WriteLine("value is :a={0},b={1}",a,b);
            }

    输出结果:

     

    用冒泡算法来看,很明显的,使用了ref关键字的函数调用以后,ab的值变化了。而没有使用ref的没有变化。

    3

           static string outvalue(out string name)
            {
                string name1= "
    蜡笔小新";
                name =name1;
                string name2= "
    小色鬼";
                returnname2;
            }
            static void Main()
            {
                string name= "
    小新";
               Console.WriteLine("before call
    {0}",name);
                stringresult = outvalue(out name);
               Console.WriteLine("after call
    {0}",name);
               Console.WriteLine("finally return
    {0}",result);
            }

    输出结果:


    4

           static void pararry(params object[] list)
            {
                for (int i =0; i < list.Length; i++)
                {
                   Console.WriteLine(list[i]);
                }
            }

           static void array(object[] list)
            {
                foreach(object _list in list)
                {
                   Console.WriteLine(_list);
                }
            }

           static void Main()
            {
                object[] arr= new object[] { 1, "a", "b" };
                pararry("a","b", "c", "...", "n");//
    传递多个参数,多个object数组
               pararry(arr);//
    将数组arr作为值参数传递
               array(arr);//
    传递一个参数,这个参数是一个数组
            }     

    输出结果:


    注意:paras类型参数主要用于在对数组长度未知(可变)的情况下进行函数声明。在方法声明中只允许一个paras关键字,并且该关键字只能为最后一个。

     总结:

    通过引用传递参数允许函数成员更改参数的值,并保持该更改。

    refout这两个关键字的区别是:

    1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。

    2、使用refout时,在方法的参数和执行方法时,都要加RefOut关键字。以满足匹配。

    3out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。

    refoutparamsref是引用方法内的参数影响结果;out是引用方法中参数返回结果到主方法;而params是将可变同类参数(即数组)传入参数。使用中ref用于需要调用引用方法内的数据的。out用于利用引用方法对主方法进行操作,而prarams用于参数长度未知的情况。

  • 相关阅读:
    Oracle報錯︰ORA-12638 證明資料擷取失敗
    tomcat启动startup.bat一闪而过[转]
    供应商术语
    如何在本地设置www.xxx.com,使其允许访问
    windows 安装包位置
    Windows Mobile系列学习四:Windows Mobile如何进行打包、设置打包显示图标
    Windows Mobile系列学习二:Windows Mobile 模拟器如何设置网络连线
    Windows Mobile的程式安装的手持机上如何设置开机自动启动功能?
    Java篇:树和Map
    JAVA篇:Java 多线程 (八)多线程下其他组件
  • 原文地址:https://www.cnblogs.com/wangyhua/p/4050626.html
Copyright © 2020-2023  润新知