c#中ref和out的用法
时间:2011-06-09 来源:Jerry_Wang
最近在做数据结构课程设计,前几天写好了c语言版的解决方法,昨天在写.net版的,可以提过用户界面的数据,在昨天写的时候有一个类对象数组方法参数的传递问题也是以前遇到的问但是一直没有解决掉,昨天在csdn论坛问了,现在可以解决了
下面是一段我开始写的代码:
public static route sumknight(int i, List<knight> list,route[,] DistanceMatrix) { route r = new route(); r.Distance = 0; foreach (knight k in list) { r.Distance = r.Distance + DistanceMatrix[k.Num, i].Distance; foreach (int j in DistanceMatrix[k.Num, i].List) { r.List.Add(j); } } return r; }
在调试运行是说有 DistanceMatrix[k.Num, i]没有被实例化的错误
在csdn问了以后有问大鸟给了一个提示他说:你这问题必须给DistanceMatrix参数加ref或out关键字...用ref则必须在调用方法之前实例化参数,用out则必须在方法体内实例化参数...
我又在网上查了一些关于参数ref和out的用法,可以总结以下几点:
1、参数传递可分值传递,引用传递。
引用类型都是引用传递,就是对传递进去的变量的修改会反映在原来的变量上, 值类型 当不用 out或者 ref的时候就是 值传递,就是对传递进去的变量的修改不会反映在原来的变量上,修改的只是原来变量的一个副本。 加上 out或者 ref可以实现值类型的引用传递
2、ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字,在调用之前要实例化每个对象
3、out 关键字会导致参数通过引用来传递,它是在调用该对象以后再方法中进行实例化
在那个问题中就是用ref关键字进行解决的在DistanceMatrix[,]的每个对象,在调用方法之前进行实例化。。
方法改为如下:
public static route sumknight(int i, List<knight> list,ref route[,] DistanceMatrix)