加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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将被装箱并复制到堆中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读