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