C# 的 readonly 与 C++ 的 const - 等价物
C#'s readonly vs C++'s const - Equivalents
这主要是一个理解检查,因为我找不到关于这个主题的完整参考。
在 C# 中,当我写 readonly Foo myFoo
时,我实际上是在说 myFoo
是指向 Foo
的指针,而 指针 不能重新分配。为了保证底层 Foo
不能被重新分配,我需要一个完整的其他 class 或接口 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
这个 table 等价关系是否正确?
是的,我想你明白了。我认为这个 const 到 readonly translation 是正确的,即使你 不应该比较这两个关键字。我认为 C++ const 和 C# readonly 关键字之间还有许多其他微妙且不同的行为。其中一些是:
- C++中的const比较强大,注意这个关键字是couple的意思
不同语境下的不同事物。在许多情况下,在 C++ 中使用 const 是某种最佳实践。在 C# 中,我们并没有那么多地使用不可变范例,但趋势正在显现,如果你看一下 the C# Immutable Collections.
- 在 C# 中,readonly 并不是真正不可变的,因为您仍然可以 change readonly Fields/Properties by reflection。
待定...
这主要是一个理解检查,因为我找不到关于这个主题的完整参考。
在 C# 中,当我写 readonly Foo myFoo
时,我实际上是在说 myFoo
是指向 Foo
的指针,而 指针 不能重新分配。为了保证底层 Foo
不能被重新分配,我需要一个完整的其他 class 或接口 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
这个 table 等价关系是否正确?
是的,我想你明白了。我认为这个 const 到 readonly translation 是正确的,即使你 不应该比较这两个关键字。我认为 C++ const 和 C# readonly 关键字之间还有许多其他微妙且不同的行为。其中一些是:
- C++中的const比较强大,注意这个关键字是couple的意思 不同语境下的不同事物。在许多情况下,在 C++ 中使用 const 是某种最佳实践。在 C# 中,我们并没有那么多地使用不可变范例,但趋势正在显现,如果你看一下 the C# Immutable Collections.
- 在 C# 中,readonly 并不是真正不可变的,因为您仍然可以 change readonly Fields/Properties by reflection。
待定...