要谈这两个关键字,先从方法参数说起: 
 
1.在C#中,默认的,所有参数都是值传递: 
 
这里面就涉及到调用方法时传递的是值类型还是引用类型(这两种类型的区别就不多说了-我发一个我用内存分配突来理解的附件给你(参数传递内存分配问题)), 
然后当中很重要的一点就是传递的参数是原始类型,那么被调方法中的改变只是在副本上进行,不会影响原来的整数;然后呢C#为了允许对传递的原始类型的修改i对象原来的对象也有用,就引入了Ref和Out关键字; 
 
2.两者都是导致参数通过引用传递(类似C中的指针变量),而且 方法定义和调用方法都必须显示Ref和Out关键字: 
 
c# CODE(Ref关键字):-  class Class1
 
 -     {
 
 -        
 
 -         
 
 -         public static void Method(ref int i)
 
 -         {
 
 -             i = 44;
 
 -         }
 
  
 
-     }
 
  
- static void Main()
 
 -         {
 
 -             int value = 0;//传递前需要初始化
 
 -             Class1.Method(ref value);
 
  
-            // val 值现在是44
 
 -           Console.WriteLine("{0}", value);
 
 -           Console.ReadKey();
 
  
 
 
-         }
 
 
  复制代码 C# CODE(Out):- class Class1
 
 -     {
 
 -         public static void Method(out int i, out string s1, out string s2)
 
 -         {
 
 -             i = 44;
 
 -             s1 = "I've been returned";
 
 -             s2 = null;
 
  
-         }
 
 - }
 
 -   static void Main(string[] args)
 
 -         {
 
  
-             int value;
 
 -             string str1, str2;//传递前不需要初始化;
 
 -             Class1.Method(out value, out str1, out str2);
 
 -            
 
 -             // value 值现在是 44
 
 -             // str1 值现在是"I've been returned"
 
 -             // str2 仍然为null;
 
 -             Console.WriteLine("{0}\n{1}\n {2}", value,str1 ,str2 );
 
  
 
 
-             Console.ReadKey();
 
 -         }
 
  复制代码 注意:如果一个方法采用ref关键字,而另一个方法采用out关键字,则无法重载(方法重载:使用带有不同参数列表的同样的方法名用于多个方法)这两个方法;因为他们在运行时处理方式虽不同,但是编译处理方式相同! 
 
 |   
        
 
    
    
    
    
 
 
 |