这主要是一个理解检查,因为我找不到关于这个话题的完整参考。
在C#中,当我写readonly Foo myFoo
时,我实际上是在说myFoo
是指向Foo
的指针,而且该指针不能被重新分配。为了保证底层的Foo
不能被重新分配,我需要一个完全不同的类或接口ImmutableFoo
。
现在考虑构造List<Foo>
。它基本上是指向指向Foo
的指针列表的指针,即类似于C++中的vector<Foo *> *
。有三个地方可以在C++中放置const
。
const vector<const Foo *> * const
- const #1:您无法修改向量(通过调整大小、重新分配元素等)
- const #2:您无法修改向量内指向的Foo-s
- const #3:您无法修改指向向量的指针
因此,我认为每个的等效物是:
List<Foo> = vector<Foo *> * // No consts
ReadOnlyCollection<Foo> = const vector<Foo *> * // First const toggled
List<ImmutableFoo> = vector<const Foo *> * // Second const toggled
readonly List<Foo> = vector<Foo *> * const // Third const toggled
readonly ReadOnlyCollection<ImmutableFoo>
= const vector<const Foo *> * const // All consts toggled
这个等效表格正确吗?