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


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

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

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

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

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

    1. 提供一个合适的构造函数集合。
    2. 通过工厂方法进行创建。
    3. 提供一个Helper类。
  • 相关阅读:
    Action返回类型
    低成本FPGA中实现动态相位调整
    SERDES高速系统(二)
    SERDES高速系统(一)
    Avalon总线概述
    FPGA热设计
    功耗的挑战
    特性阻抗介绍
    低阻抗电源分配系统
    非理想回路信号衰减
  • 原文地址:https://www.cnblogs.com/wing011203/p/1640768.html
Copyright © 2020-2023  润新知