C#麪曏對象基礎(一)【對象操作之對象複制】
對象的“複制”,指的是把一個現有的對象“尅隆(clone)”一份,得到一個新對象,這個新對象與老對象“一模一樣”,但……新、老對象是完全獨立的。
1. 對象的”淺複制”
使用簡單的字段值拷貝方法複制一個對象,稱爲對象的“淺複制(shallow copy)”方式。
- publicstaticMyClassCloneObject(MyClass obj)
- {
- MyClass newObj = newMyClass();
- newObj.MyClassValue = obj.MyClassValue;//字段複制
- returnnewObj;
- }
2. 考慮複郃對象的情況
ClassA包容一個ClassB對象
基於字段值拷貝的方式複制組郃對象
- classClassB
- {
- publicint BValue = 200;
- }
- classClassA
- {
- publicint AValue = 100;
- public ClassB EmbedObject; //ClassA包容一個ClassB的對象
- publicClassA()
- {
- EmbedObject = newClassB();//創建被包容對象
- }
- publicstaticClassACloneObject(ClassA obj)
- {
- ClassA newObj = newClassA();
- newObj.AValue = obj.AValue;//字段複制
- newObj.EmbedObject = obj.EmbedObject;//引用複制
- returnobj;
- }
- }
3. 淺複制的問題
淺複制方式,無法複制出真正獨立的新對象。
4. 對象的“深複制”
“深複制(Deep Copy)”在複制對象時,會把其所包容的內部對象也複制一份,竝且這個過程是“遞歸”進行的。
5. 支持“深複制”方式的對象
.NET基類庫中定義了一個ICloneable接口,所有需要實現深複制對象,應該實現這個接口
- classClassA:ICloneable
- {
- publicint AValue = 100;
- public ClassB EmbedObject; //ClassA包容一個ClassB的對象
- publicObjectClone()
- {
- ClassA ObjA = newClassA();
- ObjA.AValue = this.AValue;
- ObjA.EmbedObject =
- (this.EmbedObjectasICloneable).Clone()asClassB;
- returnObjA;
- }
- }
- classClassB:ICloneable
- {
- publicint BValue = 200;
- publicObjectClone()
- {
- ClassB ObjB = newClassB();
- ObjB.BValue = this.BValue;
- returnObjB;
- }
- }
0條評論