D中C#`readonly`关键字的等价物?

栏目: C# · 发布时间: 5年前

内容简介:根据我在阅读D时的理解,当在变量上使用immutable关键字时,变量的值必须在编译时知道,而C#的readonly不需要,并且readonly字段可以在类构造函数中使用non分配 – 静态价值观.这可能在D?翻译自:https://stackoverflow.com/questions/6036807/equivalent-of-c-sharp-readonly-keyword-in-d

根据我在阅读D时的理解,当在变量上使用immutable关键字时,变量的值必须在编译时知道,而C#的readonly不需要,并且readonly字段可以在类构造函数中使用non分配 – 静态价值观.这可能在D?

由于似乎存在一些关于不可变的混淆(来自原始问题和he_the_great的评论),我想我会补充一下.

当你说immutable int i = 42时,你说我不会被修改,而不是在编译时知道它的值. immutable实际上是一个类型修饰符,并创建一个新类型. immutable T是不可变(T)的简写. immutable(T)创建一个永远不会变异的T,也就是说,如果你读取了值,然后调用一个函数,则值将是相同的.将此与const(T)进行比较,它提供了较弱的保证,即该类型的实例不会被修改,但有人可能对其他地方有可变的访问权限,所以如果你读取该值然后调用一个函数,你就不能假设价值会是一样的.

通常,不可变(T)!= T.但是在某些情况下,它们可以隐式地相互转换.例如,如果T是一种据说没有“可变间接”的类型.也就是说,如果我传递一个函数一个不可变(int),它们会收到一个副本 – 如果类型系统不允许,那么该函数无法修改我传递的值,因为它被复制了它只会令人烦恼而没有额外的保证,所以D型系统允许它.但是,如果我传递一个immutable(int *),那么可以通过调用函数进行更改.在结构的情况下,如果任何成员具有可变间接,那么结构也被认为具有它.

因此,为了摆脱理论并回到更实际的问题,在编译时必须知道不可变值,并且没有好的方法来创建它们.但是,唯一的突变可能发生在构造函数内部.对于简单的标量类型,这很明显:

immutable(int) i = rand();

但是像物体一样呢?好吧,构建我们使用的类型T.

auto t = new T();

所以要构造我们使用的类型immutable(T)

auto t = new immutable(T)();

这是一个更完整的小例子

class Useless
{
    int i;

    this(int i)
    {
        this.i = i;
    }
}

int main(string[] args)
{
    auto o = new immutable(Useless)(cast(int) args.length);
    //o.i = 17;  error
    return o.i;  // fine
}

如您所见,构造函数内部可能发生变异.您可以读取成员变量,但不能写它们(不可变是传递的;也就是说,如果父进程,每个成员(以及成员的每个成员)都变为不可变.只有当它们被标记为const时才能调用方法.

我为偏离话题的漫无边际道歉,但我看到很多人似乎对这个话题感到困惑.

翻译自:https://stackoverflow.com/questions/6036807/equivalent-of-c-sharp-readonly-keyword-in-d


以上所述就是小编给大家介绍的《D中C#`readonly`关键字的等价物?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

中国机器人

中国机器人

[中]王鸿鹏、[中]马娜 / 辽宁人民出版社 / 2017-1-1 / 48.00元

本书对中国机器人领域的发展历史做了引人入胜的介绍,中国机器人成长的过程也是中国经济由弱到强的历程。本书实际是选择了一个独特的视角来解读中国数十年的政治、经济、国家战略问题。中国的未来充满了多重可能性,本书对想了解中国当代与未来发展战略的读者是难得的读本,对智能制造这一当今世界*受关注的高科技领域在战略层面和科技伦理层面进行了深入地剖析和思考,其中提出的诸多前沿性观点是全球都将面对的问题,对中国科学......一起来看看 《中国机器人》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试