c#中ref和out的用法
最近在做数据结构课程设计,前几天写好了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) |
----转载请注明出处http://www.cnblogs.com/JerryWang1991/ 谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架