要谈这两个关键字,先从方法参数说起:
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关键字,则无法重载(方法重载:使用带有不同参数列表的同样的方法名用于多个方法)这两个方法;因为他们在运行时处理方式虽不同,但是编译处理方式相同!
|
|