C#方法的参数关键字:ref、out、params

using  System;
 
namespace  方法的参数传递机制
{
 
     class  Method
     {
 
          // 值参数(Value Parameter):方法名称(参数类型 参数名称 [,参数类型 参数名称])
          // 引用参数(Reference Parameter):方法名称(ref 参数类型 参数名称 [,ref 参数类型 参数名称])
          // 输出参数(Output Parameter):方法名称(out 参数类型 参数名称 [,out 参数类型 参数名称])
 
         // 字符串在创建后就不能改变,但我们对其进行操作改变时,我们实际上操作的是它的一个副本,若要直接操纵它可以使用ref或out关键字
         // string和数组都是引用类型的变量
 
 
         // 值参数
         public  static  void  ValueMethod( int  i)
         {
             i++;
         }
         // 引用参数(ref):ref在使用前需要先初始化变量的值,在方法体外先初始化。
         public  static  void  RefMethod( ref  int  i)
         {
             i++;
         }
         // 输出参数(out):out参数必须在方法体内初始化
         public  static  void  OutMethod( out  int  i)
         {
             i = 0;
             i++;
         }
         
         // 可变参数params, params后面必须跟数组,之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字
         static  int  addi( params  int [] values)
         {
             int  sum = 0;
             foreach ( int  i in  values)
             {
                 sum = sum + i;
             }
             return  sum;
         }
 
 
         // 主函数
         static  void  Main()
         {
             // 值参数
             int  i = 0; // 这里声明变量 i ,那么在内存堆栈中就为i开了一个新的空间并存放它
 
             ValueMethod(i); // 执行函数后,ValueMethod中的 i 被加1,这里的参数 i 只是上面声明的变量 i  的一个拷贝,执行后,原始变量 i 没有改变
             
             Console.WriteLine( "i="  + i); // 结果:i=0,说明这里的 i 和ValueMethod()函数里的 i 不是同一个 i
 
             //============================================================
 
 
             // 引用参数ref
 
             int  j = 0; // ref 在使用前需要初始化变量的值。
 
             RefMethod( ref  j); // ★ ref 相当于声明了一个指针,直接指向变量j,并操纵它,内存中j只有一个,未发生拷贝
 
             Console.WriteLine( "j="  + j); // 结果:j=1,说明第一个j也变成了1,即内存中最原先的变量j的值变成了1
 
 
             //============================================================
 
 
             // 输出参数out
 
             int  k; // 在这里不能对k初始化,如int k=0是不行的
 
             OutMethod( out  k); // ★ out 和引用参数类型ref一样,操作的也只有一块内存地址
 
             Console.WriteLine( "k="  + k); // 结果:k=1,这里说明用ref参数和用out参数得到的结果是一样的
 
             //★ ref和out雷同,主要的区别在于谁负责初始化
             //  ref 参数必须在使用前先初始化,也就是在方法体外初始化
             //  out 参数必须在方法体内初始化
 
 
             //==============================================================
 
 
             // 可变参数
 
             // 一般做法是先构造一个对象数组,然后将此数组作为方法的参数
             int [] arr = new  int [3] { 1, 2, 3 };
             Console.WriteLine(addi(arr));
 
            
             // 而使用了params修饰方法参数后,我们可以直接使用一组对象作为参数
             Console.WriteLine(addi(1, 2, 3));
 
 
 
 
             Console.ReadKey();
         }
     }
}

另:C# 的数据类型有两种:

一种是值类型(value type),一种是引用类型(reference type)。

值类型包括:结构体(数值类型,bool,用户自定义结构体)、枚举和可空类型。

引用类型包括:数组,用户定义的类、接口、委托,object,字符串。

值类型和引用类型的区别在于:函数参数传递的时候,值类型把自已的值复制一份传递给别的函数操作,也就是说无论函数的值怎么改变,其本身的值都不会受到影响。而引用类型则是把自己的地址传递给别的函数,操作的是他本身的值,所以当传递的值改变时,其本身的值也跟着改变。

学习笔记,如有错误或遗漏,请指教。谢谢!

转:http://www.cnblogs.com/fishtreeyu/archive/2011/02/26/1965734.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值