纯粹的返回一个栈引用的确没啥意义,而且容易造成野指针(应该在语言层面有所限制,待测试)。
但是这个的确和值类型还是引用类型没有啥关系,我们并不需要关心数组的元素是什么类型的。本质上,只要这是一个托管堆上的值就有意义。
可以认为说白了就是一个 object + member accesser 的包装,这种包装的意义和委托一样,就是获得可以直接访问成员的便利,还可以刺破封装什么的。
说白了,数组直接用Span就好了,这种东西就是Span对普通对象的拓展。
我们不要忘了有些东西看起来在栈上实际在堆上,例如闭包……
做了一些测试,首先就是ref T类型的玩意儿,是stack only的,即只能存在于栈上,而不能存在于堆上。
和 ref struct 差不多,所以这货就是Span的拓展了……
顺便也测试了一下,纯粹的栈引用是不能返回的:
显然这样就很安全了。
做了各种测试,都没有办法把纯粹的栈值按引用返回: