• Effective C# Item7:将值类型尽可能实现为具有常量性和原子性的类型


        在创建值类型实例时,应该尽可能将其实现为具有常量性和原子性,所谓常量性,就是说对象在创建后就不会被改变,类似于我们在程序中定义的常量,这种形式的值类型只要被创建好后,就可以认为它的状态一直是不变的,这样它就是线程安全的。

        原子性是指值类型中某些具有关联关系的字段,例如生日和年龄,年龄是根据生日计算得来的,如果对象的使用方只是修改年龄,而不修改生日,那么这样的结果显然是错误的。具有原子性的类型都是单一的实体,我们需要同时对相关联的字段进行维护。

        关于如何构建常量型的值类型,可以分为以下两个步骤:1)将类型中的私有字段声明为readonly;2)将类型中的属性,设置为只读,即将属性的set方法删除。

        需要注意的是,在将值类型转换为常量型的过程中,所谓的常量,是指针对在“堆栈”中存储的数据,对于在”堆“中存储的数据来说,单纯使用readonly设置是不够的,这里的”常量“只是说明指向”堆“中的内存地址是不会改变的,我们可以通过其他方式改变对应内存中的值。为了解决这个问题,我们需要对”堆“中的数据进行防御性复制。

        关于如何初始化常量类型,通常有三种方式:

    1. 提供一个合适的构造函数集合。
    2. 通过工厂方法进行创建。
    3. 提供一个Helper类。
  • 相关阅读:
    位军营 20190919-4 测试,结对要求
    位军营 20190919-5 代码规范,结对要求
    国内源
    hexo安装-nodejs
    python调用chrome打开指定网址
    生成证书,用于签名Android应用
    cygwin64-安装包管理工具
    Android-删除指定包名的App
    pyqt5加载网页的简单使用
    打包python到exe
  • 原文地址:https://www.cnblogs.com/wing011203/p/1640768.html
Copyright © 2020-2023  润新知