C#的readonly与C ++的const

这主要是理解检查,因为我无法找到关于此主题的完整参考。

在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:你不能修改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
    

    这张等值表是否正确?


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

  • C ++中的Const更强大,请注意,这个关键字在不同的上下文中意味着一些不同的东西。 在许多情况下,在C ++中使用const是一种最佳实践。 在C#中,我们不使用不可变的范例,但是趋势正在显现,如果你看看C#不可变集合。
  • 在C#中,readonly并不是真正不可变的,因为您仍然可以通过反射来更改只读字段/属性。
  • TBC ......

    链接地址: http://www.djcxy.com/p/87333.html

    上一篇: C#'s readonly vs C++'s const

    下一篇: How to change color of text in whole application by changing theme