http://www.cnblogs.com/YSO1983/archive/2010/06/10/1755665.html

下面我总结下我对out和ref引用参数的看法: 
1.out和ref引用参数的相同点:都是通过引用传递参数给函数; 
2.out和ref引用参数的不同点是:用ref引用传递参数,该参数必须经过初始化,并且不能在调用它的函数中初始化,以下例子是错误的: 
             namespace refConsoleApp 
             { 
                 class MyRefClass 
                     { 
                                 static void MyRefMethod(ref int i) 
                                { 
                                         int i=20; 
                                } 
                                static void main(string[] args) 
                                { 
                                         int value;                  //not initialized the value; 
                                         MyRefMethod(ref value); 
                                         Console.WriteLine("The value is {0}",value);  
                                } 
                       } 
             } 
3.使用out引用多个参数来返回多个值,这允许方法任意地返回需要的值,以下例子: 
namespace multi_outConsoleApp 

    class MyMultipleoutClass 
    { 
        static void MyMultipleMethod(out int i, out string str1, out string str2) 
        { 
            i = 20; 
            str1 = "I was born"; 
            str2 = "zhaoqing";

        } 
        static void Main(string[] args) 
        { 
            int value; 
            string s1, s2; 
            MyMultipleMethod(out value,out  s1,out  s2); 
            Console.WriteLine("The integer value is {0} The first string value is {1} The second string value is {2}", value, s1, s2);

        } 
    } 
}

显示的结果为: 
The integer value is 20 
The first string value is I was born 
The second string value is zhaoqing 
4.  如果一个方法使用ref引用参数,另一个方法使用out引用参数,则这两个相同方法名的函数不能重载,否则出现编译错误,以下例子出现: " cannot define overloaded  methods that differ only on ref and out " 
namespace overloadofConsoleApp 

    class overloadofclass 
    { 
        static void MyMethod(ref int i) 
        { 
            i = 20; 
        } 
        static void MyMethod(out int i) 
        { 
          i = 40; 
        } 
        static void Main(string[] args) 
        { 
            int refvalue=0; 
            MyMethod(ref refvalue); 
            Console.WriteLine("The value is {0}", refvalue); 
            int outvalue; 
            MyMethod(out outvalue); 
           Console.WriteLine("The value is {0}", outvalue); 
        } 
    } 
}   
以下例子是正确的: 
namespace overloadofConsoleApp 

    class overloadofclass 
    { 
        static void MyMethod(ref int i) 
        { 
            i = 20; 
        } 
        static void MyMethod( int i) 
        { 
          i = 40; 
        } 
        static void Main(string[] args) 
        { 
            int refvalue=0; 
            MyMethod(ref refvalue); 
            Console.WriteLine("The value is {0}", refvalue); 
            int outvalue=0; 
            MyMethod(outvalue); 
           Console.WriteLine("The value is {0}", outvalue); 
        } 
    } 

显示结果为: 
The value is 20 
The value is 0 
         5.通过ref参数来改变引用类型,因为引用类型作为ref参数来传递,同时该对象会被改变.以下例子: 
namespace refConsoleApp 

    class refclass 
    { 
        static void RefMethod(ref string s) 
        { 
            s = "I was born in zhaoqing"; 
        } 
        static void Main(string[] args) 
        { 
            string str = "I am goalbell"; 
            RefMethod(ref str); 
            Console.WriteLine("The value is {0}", str); 
        } 
    } 

显示结果: 
The value is I was born in zhaoqing

           6.通过ref和out来传递数组,用ref传递数组的时候,必须在main函数里面初始化一个数组,而在被调用的方法中可以指定一个数组为空值或者初始 化成一个不同的数组;用out 传递数组的时候,在被调用的方法中确定为一个数组赋值.以下例子来区别一下它们: 
namespace refszConsoleApp 

    class refszclass 
    { 
        static void RefszMethod(ref int[] arr) 
        { 
            if (arr == null)        //assigned the null value 
            { 
                arr = new int[5];   //initialized to a different array 
            } 
        } 
        static void Main(string[] args) 
        { 
            int[] theArray ={ 1, 2, 3, 4, 5 };//initialize the theArray 
            RefszMethod(ref theArray); // pass the value using of ref 
            Console.WriteLine("Array elements are:"); 
            for (int i = 0; i < theArray.Length; i++) 
            { 
                Console.WriteLine(theArray[i] + ""); 
            } 
        } 
    } 

namespace outszConsoleApp 

    class outszclass 
    { 
        static void OutszMethod(out int[] arr) 
        {

            arr = new int[5] { 1, 2, 3, 4, 5 };//initialize the arr 
        } 
        static void Main(string[] args) 
        { 
            int[] theArray ; 
            OutszMethod(out theArray); 
            Console.WriteLine("Array elements are:"); 
            for (int i = 0; i < theArray.Length; i++) 
            { 
                Console.WriteLine(theArray[i] + ""); 
            } 
        } 
    } 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值