【发布时间】: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++ 中的 const 也可以应用于类方法,这是 C# 中不存在的概念。看到这个问题:stackoverflow.com/questions/3799062/const-methods-in-c-sharp