在C#中只读二维数组

sbl*_*lom 9 c# readonly immutability

在C#中是否有任何已建立的返回只读二维数组的方法?

我知道ReadOnlyCollection对于一维数组使用是正确的,我很乐意编写自己的包装类来实现一个this[] {get}.但是如果这个轮子已经存在,我不想重新发明轮子.

Jot*_*aBe 2

只有一种方法可以模拟这一点。

您需要使用私有数组创建自己的类。

数组最相似的实现是索引器:

“10.8”链接显示了二维数组的模拟。

如果仅使用 getter 实现索引器,则用户只能读取元素,而不能写入它们。但是,如果每个元素都是对象(引用类型),则无法阻止对所访问对象属性的修改。

然而,有几种模拟“只读”对象的方法:

  • 创建一个包装类,将数组中每个元素的属性公开为只读属性,以便它们无法修改
  • 使用原始值类型(如int
  • 通过返回私有数组中元素的副本而不是私有数组中的原始元素来阻止更改,这样,对对象所做的更改不会影响数组中的原始对象。

在其他语言(如 C++)中,存在指向常量值的引用和指针,但 C# 中不存在这种情况。