【问题标题】:C#'s readonly vs C++'s const - EquivalentsC# 的 readonly 与 C++ 的 const - 等价物
【发布时间】:2023-03-27 00:55:01
【问题描述】:

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

在 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

这个等价表是否正确?

【问题讨论】:

标签: c# c++ constants


【解决方案1】:

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

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

待定...

【讨论】:

  • 在 C++ 中你也可以改变 consts
猜你喜欢
  • 1970-01-01
  • 2011-08-26
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2010-10-05
相关资源
最近更新 更多