1、值类型与引用类型、深拷贝与浅拷贝。
在了解原型模式前得先对这四个知识点有些了解。我先简单介绍一下这四个知识点。
1.1 值类型与引用类型(C#仅有这两种数据类型)

值类型:
常见的值类型:int、long、short、byte、float、double、bool、char、Struct(用户建立的结构体通常是值类型的)、Nullable Types(这是一个特殊的值类型,表示一个正常值或者空,比如int?)
所谓值类型就是其能直接用来表示一个值。不需要实例化等操作(new),值类型变量声明后,不管是否已经赋值,编译器为其分配内存。
例如:
int a = 10;
int b = 20;
值类型直接存储在内存(称之为栈(STACK),栈以LIFO访问,后进栈的数据先被访问,栈的大小是固定的,不是动态分配的,所以访问速度快)中,当把一个值赋值给另外一个变量时,其实是把变量的值复制给了新的变量,而不会改变原有值。
引用类型:
常见的引用类型包括类(class),接口(interface),数组(array),委托(delegate)等。
引用类型是存储数据的引用也就是内存地址,实际数据是存储在托管堆(Managed Heap)上,用new动态分配内存,由GC(垃圾回收器)释放。
例如:
MyClass my=new MyClass();
区别:
-
存储位置:
- 值类型:直接存储数据,例如整数、浮点数、结构体等。值类型变量在赋值或传递参数时会进行值的复制。
- 引用类型:存储的是对象的引用,而对象的数据存储在堆上。引用类型变量在赋值或传递参数时,传递的是引用。
-
内存管理:
- 值类型:内存分配和释放由编译器自动处理,不需要手动管理内存。
- 引用类型:需要手动进行内存管理,使用
new关键字分配内存,并通过垃圾回收机制自动释放内存。
-
传递方式:
- 值类型:作为参数传递给方法时,是将变量的副本传递给方法。
- 引用类型:作为参数传递给方法时,传递的是引用,方法中对引用类型的变量进行的任何修改都会影响到原始对象。
-
可空性:
- 值类型:可以是可空的,即可以赋予null值。
- 引用类型:本身就是引用,可以直接赋予null值
1.2、深克隆与浅克隆
浅克隆(Shallow Clone)
浅克隆是指复制对象的所有值类型字段,而对于引用类型字段,只是复制其引用地址,而不是复制引用的对象本

1246

被折叠的 条评论
为什么被折叠?



