ref和out区别

方法参数上的   ref   方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。  
   
  若要使用   ref   参数,必须将参数作为   ref   参数显式传递到方法。ref   参数的值被传递到   ref   参数。  
   
  传递到   ref   参数的参数必须最先初始化。将此方法与   out   参数相比,后者的参数在传递到   out   参数之前不必显式初始化。  
   
  属性不是变量,不能作为   ref   参数传递。  
   
  如果两种方法的声明仅在它们对   ref   的使用方面不同,则将出现重载。但是,无法定义仅在   ref   和   out   方面不同的重载。例如,以下重载声明是有效的:  
   
  class   MyClass    
  {  
        public   void   MyMethod(int   i)   {i   =   10;}  
        public   void   MyMethod(ref   int   i)   {i   =   10;}  
  }  
  但以下重载声明是无效的:  
   
  class   MyClass    
  {  
        public   void   MyMethod(out   int   i)   {i   =   10;}  
        public   void   MyMethod(ref   int   i)   {i   =   10;}  
  }  
方法参数上的   out   方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。  
  当希望方法返回多个值时,声明   out   方法非常有用。使用   out   参数的方法仍然可以返回一个值。一个方法可以有一个以上的   out   参数。  
  若要使用   out   参数,必须将参数作为   out   参数显式传递到方法。out   参数的值不会传递到   out   参数。  
  不必初始化作为   out   参数传递的变量。然而,必须在方法返回之前为   out   参数赋值。  
  属性不是变量,不能作为   out   参数传递。  
  如果两个方法的声明仅在   out   的使用方面不同,则会发生重载。不过,无法定义仅在   ref   和   out   方面不同的重载。例如,以下重载声明是有效的:  
  class   MyClass    
  {  
        public   void   MyMethod(int   i)   {i   =   10;}  
        public   void   MyMethod(out   int   i)   {i   =   10;}  
  }  
  而以下重载声明是无效的:  
  class   MyClass    
  {  
        public   void   MyMethod(out   int   i)   {i   =   10;}  
        public   void   MyMethod(ref   int   i)   {i   =   10;}  
  }

posted @ 2014-05-25 11:17  zzg168  阅读(122)  评论(0)    收藏  举报