博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《.NET 进阶指南》读书笔记2------定义不可改变类型
阅读量:7213 次
发布时间:2019-06-29

本文共 1257 字,大约阅读时间需要 4 分钟。

不可改变对象的定义

一个类型的对象在创建后,它的状态就不能再改变,知道它死亡,它的状态一直维持与创建时相同。这时候称该对象具有不可改变性。这样的类型为不可改变类型。不可改变对象在创建的时候,必须完全初始化。因为创建完成后就不能再改变了。任何对不可改变对象进行的操作都会生成一个新的对象。例如String类型就是一个不可改变类型。任何对String类型实例的改变,如String.Trim()、String.Replace()都不会影响原有的String对象,这些方法都会生成一个全新的String对象。

如何定义一个不可变类型

定义一个不可改变类型时,需要注意以下三点:

  • 类型的构造方法一定要设计好,能够充分的初始化对象,因为对象创建好后,就无法再进行改变,构造方法是唯一能够改变对象状态的地方;
  • 涉及改变对象状态的方法均不能真正的改变对象的本身,而都应该返回一个全新的对象;
  • 类型的所有的公开属性都应该是只读的,并且注意一些引用类型虽然是只读的,但是可以通过只读的引用去更改堆中的实例从而更改了原对象的状态
class ImmutableType{    private int _val;    private int[] _refs;    public int Val    {        get  {    return _val;  }    } // 对于引用类型,返回一个新的对象,防止被改变 public int[] Refs {  get  {   int b = new int[_refs.Length];   for(int i = 0; i < b.Length;i++)   {    b[i] = _refs[i];   }   return b;  } }     //构造函数 public ImmutableType(int val,int[] refs) {  _val = val;     _refs = new int[refs.Length];     for(int i = 0; i < _refs.Length;i++)     {      _refs[i] = refs[i];     } }     // 对属性进行更新时返回了一个新的对象 public ImmutableType UpdateVal(int val) {        return new ImmutableType(this._val + val,this._refs); }}class Program{ static void Main() {     ImmutableType a = new ImmutableType(1,new int[]{1,2,3,4});        a = a.UpdateVal(2);// 这里返回了一个新的对象   }}

转载于:https://www.cnblogs.com/MaFeng0213/p/9925604.html

你可能感兴趣的文章
Qt控件中的属性sizePolicy说明
查看>>
Deep Learning(深度学习)学习笔记整理系列
查看>>
lua对模块接口扩展的一种方法
查看>>
nyoj116士兵杀死(两)段树单点更新
查看>>
cdoj 1252 24点游戏 dfs
查看>>
JAVA中int、String的类型转换
查看>>
【iOS开发-74】解决方式:Xcode6下利用preference保存数据,终于的plist文件在哪里?...
查看>>
Linux下mysql备份 恢复
查看>>
iOS 开发-单元测试
查看>>
[TypeScript] Installing TypeScript and Running the TypeScript Compiler (tsc)
查看>>
使用.NET Framework的配置文件app.config
查看>>
C++11 并发指南------std::thread 详解
查看>>
windows下编译chromium浏览器的15个流程整理
查看>>
p2p穿透技术
查看>>
Coding 初级教程(二)——上传已有项目
查看>>
Esper epl语句实验
查看>>
【TensorFlow】CNN
查看>>
redis cli命令
查看>>
网上开店进货渠道大参考
查看>>
图灵成立七周年——经典回顾
查看>>