C# 复制值类型的变量和类

  C#大多数基元类型包括int、float、double、和char等,注意这里不包括string,这些都是值类型。将变量声明为值类型,编译器会生成代码来分配足以容纳这个值得内存块。编译器分配内存的时候并不是分配一个能够容纳整个类的内存块,它唯一做的事情就是分配一个这个类的地址。

  c#的string实际是类类型。由于字符大小不固定,所以分配的是一个动态的内存,而不是编译的时候分配一个静态。

  引用类型的复制与私有数据:
  要将一个引用类型的某个对象,复制给另一个引用类型的某个对象,不能直接复制引用,必须让这个引用类型应用需要复制类的新实例,再将数据字段从上一个引用类型中复制出来。但是如果需要复制的这个字段在类中的属性是私有的,就不能复制这个数据,私有字段作为属性公开,再通过属性读取这个数据并复制出来。另外,类可以提供clone方法来返回自己的新实例,并填充相同的数据,clone方法能够访问对象的私有数据,并直接将数据复制到同一个类中的另一个实例中去。

  这个位置我们需要知道私有数据到底  私有 在哪个位置,private关键字创建了不能从类外访问的字段或方法。 但是,并不是说它只能单过对象访问,创建同一个类的两个对象,他们分别能够范围对象的私有数据。clone就是依赖这个原理实现的,clone.a = this.a;这样之所以能够工作,正式因为可以从a类的当前实例中访问clone对象的私有a字段,所以  私有 实际指的是在  类的级别上私有 并不是在对象级别上私有   私有和静态也是两码事,字段声明为私有,类的每个实例都有一份自己的数据,声明为静态,每个实例都共享同一份数据。

    
                                                                                                                          

posted @ 2017-11-22 23:12  Dipsyhu  阅读(3046)  评论(0编辑  收藏  举报