1.ref和out的区别:
简介:ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递。对于编译后的程序而言,他们之间没有任何区别,也就是说他们只有语法的区别
主要区别分析:
注:这里只介绍比较重要的区别,其他的区别通过这几条都可以分析出来
- ref传进去的参数在调用前就初始化,而out就不必(主要记住这条其他的都可以推倒出来);
- ref穿进去的参数在方法体(函数)内部“可以不被修改”但out必须在离开函数体前进行赋值
1 static void Main(string[] args) 2 { 3 int i=3; //对于ref这里必须进行初始化 4 int j=4; //对于out这里初始化了也没用,方法体了是得不到这个值的 5 method(ref i); //method(ref int i=3)这样是错误的 6 method(out j) //method(out int i=3)这样也是错误的 7 Console.ReadKey(); 8 } 9 10 static void method(ref int i) 11 { 12 i=20; //在这里也可以不对i进行赋值 13 Console.WriteLine(i); 14 } 15 16 static void method(out int i) 17 { 18 i=20; //这里就必须给i进行赋值了 19 Console.WriteLine(i); 20 }
下面介绍ref和out关于重载和调用前的初始值:
- 关于重载
-
- 有ref,out的关键字的方法可以与没有ref,out关键字的方法构成重载
-
- 调用前初始值
-
- ref在调用前实参必须初始值,否则编译器将提示使用了未赋值的局部变量;
- out作为参数作为参数在调用前,实参可以不赋初始值
-
下面通过两个案例深入进行分析:
案例一:
案例二: