c# - C#'s readonly vs C++' s const - 等价物

标签 c# c++ constants

这主要是一个理解检查,因为我找不到关于这个主题的完整引用。

在 C# 中,当我编写 readonly Foo myFoo 时,我实际上是在说 myFoo是指向 Foo 的指针,并且指针不能被重新分配。保证底层Foo无法重新分配,我需要一个完整的其他类或接口(interface) ImmutableFoo .

现在考虑构造 List<Foo> .它基本上是指向指向 Foo 的指针列表的指针。 ,即类似于 vector<Foo *> *在 C++ 中。您可以在三个地方放置 const在 C++ 中。

const vector<const Foo *> * const
  • const #1:您不能修改 vector (通过调整大小、重新分配元素等)
  • const #2:你不能修改指向 vector 内部的 Foo-s
  • const #3:你不能修改指向 vector 的指针

所以我认为每一个都等价于,

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

这个等价表是否正确?

最佳答案

是的,我想你明白了。我认为从 constreadonly 翻译 是正确的,即使您不应该比较这两个关键字。我认为 C++ const 和 C# readonly 关键字之间还有许多其他微妙且不同的行为。其中一些是:

  • C++中的Const比较强大,注意这个关键字是一对的意思 不同语境下的不同事物。在许多情况下,在 C++ 中使用 const 是某种最佳实践。在 C# 中,我们并没有那么多地使用不可变范式,但趋势正在显现,如果你看一下 the C# Immutable Collections .
  • 在 C# 中,readonly 并不是真正不可变的,因为您仍然可以 change readonly Fields/Properties by reflection .

tbc...

关于c# - C#'s readonly vs C++' s const - 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31946546/

相关文章:

c# - ReSharper 代码检查添加

c# - 如何通过c#代码查找网络上UPNP设备的IP地址(DHCP)

c# - 删除嵌套 TabPage 的代码并不总是有效

java - 为什么java枚举中的一些常量字段不是值?

c++ - VC++ 2010的另一个BUG?关于在 header 中声明常量 REFERENCE

c# - 在 asp.net 中以编程方式设置 "expires"http header 的值

c++ - Glfw glDrawElements绘制三角形怪异

c++ - 可变大小数组类型 ‘int [size]’ 不是有效的模板参数

c++ - 提高图形连通性计算的性能

perl - 我可以对要迭代的常量进行分组吗?