c#小技巧3

1. 深拷贝与浅拷贝
深拷贝,对对象整体进行拷贝包括对象的值数据和引用到的对象。
浅拷贝,只拷贝对象的非静态字段,如值类型数据。如果字段为引用字段那么只拷贝引用,因此引用到的对象还是原来的对象。
    // 这个标志是必须的,告诉assembly该类可以序列化
    [Serializable]
    
class Aphla
    
{
        
private string _name;
        
private Beta _beta;

        
public string Name
        
{
            
set { _name = value; }
            
get return _name; }
        }


        
public string BetaName
        
{
            
set { _beta.Name = value; }
        }


        
public Aphla(Beta b)
        
{
            _beta 
= b;
        }


        
public void Display(string objName)
        
{
            Console.WriteLine(
"{0}, {1}", objName, _name);
            _beta.Display();
        }


        
// 深拷贝对象
        public Aphla Clone()
        
{
            Aphla a;
            
// 创建流用于保存要被序列化的对象
            MemoryStream ms = new MemoryStream();
            
// 创建二进制格式器,用于对序列化对象的流进行格式化
            BinaryFormatter bf = new BinaryFormatter();

            
// 将指定的对象以创建的格式器序列到流中
            bf.Serialize(ms, this);
            
// 将流的游标置回开始点
            ms.Position = 0;

            
// 反序列化流到对象
            a = (Aphla)bf.Deserialize(ms);
            
return a;
        }


        
// 浅拷贝对象
        public Aphla ShallowClone()
        
{
            Aphla a 
= (Aphla)this.MemberwiseClone();
            
return a;
        }

    }



    
public class Beta
    
{
        
private string _name;

        
public string Name
        
{
            
get return _name; }
            
set { _name = value; }
        }


        
public void Display()
        
{
            Console.WriteLine(
"Beta: {0}", _name);
        }

    }
posted @ 2007-11-09 13:59  moonz-wu  阅读(231)  评论(0编辑  收藏  举报