这主要是一种理解检查,因为我找不到关于这个主题的完整参考.
在C#中,当我写的时候readonly Foo myFoo,我基本上是说myFoo是一个指针Foo,并且指针不能被重新分配.为了保证底层Foo不能被重新分配,我需要一个完整的其他类或接口ImmutableFoo.
现在考虑构造List<Foo>.它基本上是指向指针列表的指针Foo,即类似于vector<Foo *> *C++.有三个地方可以放入constC++.
const vector<const Foo *> * const
Run Code Online (Sandbox Code Playgroud)
所以我认为每个相当于,
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
Run Code Online (Sandbox Code Playgroud)
这个等价表是否正确?
是的,我想你明白了。我认为这个const到readonly 的 翻译是正确的,即使你不应该比较这两个关键字。我认为 C++ const和 C# readonly关键字之间还有许多其他微妙且不同的行为。他们之中有一些是:
待定...