C#里怎么实现“只读引用”
发布网友
发布时间:2022-06-13 14:17
我来回答
共1个回答
热心网友
时间:2023-10-13 20:20
只读 ref 参数
在 C# 中,“只读引用”也可称为“in 参数”,两者提供了类似的*。只读引用的基本思想是,如果用“readonly ref”或仅是“in”标注一个参数,那么编译器会解释为“将该参数按引用传递以改进性能,但不允许实际更改该参数”。该特性对于在高性能场景下的大型结构体尤为有用。在建议中引用了如下的例子:
我们知道,在 XNA 等图形库中的向量/矩阵数*算符是具有 ref 操作符的,这纯粹是出于性能上的考虑。Roslyn 编译器本身就有代码使用了结构体,以避免内存分配,并可通过引用的方式传递结构体,免除复制的繁琐。
该语法还结合了 C++ 版本的 const。即参数本身是不可更改的,参数所引用的对象或结构体中的所有数据也是不可更改的。
当前在通过引用传递一个参数时,必须使用“ref”或“out”关键字。在这个建议实现后,使用“in”参数无需受此*。进而表达式的结果也可以传递进来(当前这在 VB 中是允许的,但是在 C# 中尚不允许)。
C# 中的 in 参数和性能分析
在C#语言中,引入了in参数修饰符,它允许参数按照引用传递,与ref或out关键字类似,但有显著区别:in参数在被调用的方法中不能被修改。这一特性尤其在处理大型结构体时展现出优势,能够避免不必要的复制操作,从而提高性能。以一个简单的例子来说,我们定义了一个包含多个属性的结构体,例如NormalStruct和...