c# – 使用ref与struct相关会导致它存储在堆上吗?
发布时间:2020-12-16 01:58:08 所属栏目:百科 来源:网络整理
导读:我正在考虑使用结构在方法中存储几个状态位,但是我希望能够使用ref keword将其传递给辅助方法以避免传递值.但是,如果我这样做,那么将存储在堆上,而不是堆栈中? 示例代码: var link = new Geoff("Bergen");Perambulate(ref link);Console.WriteLine(link.Na
我正在考虑使用结构在方法中存储几个状态位,但是我希望能够使用ref keword将其传递给辅助方法以避免传递值.但是,如果我这样做,那么将存储在堆上,而不是堆栈中?
示例代码: var link = new Geoff("Bergen"); Perambulate(ref link); Console.WriteLine(link.Name); void Perambulate(ref Geoff man) { Console.WriteLine("Perambulating {0}",man.Name); } struct Geoff { public readonly string Name; public Geoff(string name) { Name = name; } } 我想我真的在问ref关键字是否强制将引用的值存储在堆上. 解决方法
你所指的是拳击和否,当通过引用传递值类型时不会发生装箱.它只会将堆栈上的引用传递给Geoff.
将值类型转换为引用类型(隐式和显式)时可能会发生绑定.例如.: var g = new Geoff(); //value type List<object> objects = new List<object>(); //collection of objects (reference type) objects.Add(g); //implicitly casting g to object 这将导致Geoff实例被复制到堆,这称为装箱. 现在,如果您的Perambulate方法接受一个对象作为参数,您传递的Geoff将被装箱并复制到堆中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |