gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:56:44 25 4
gpt4 key购买 nike

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

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com