简单介绍二进制序列化和深拷贝

 

获得当前路径的方法:

 1 Directory.GetCurrentDirectory();

    //注意:====不推荐使用=== 此方法确实能过的文件的路径。但是肯能会被改动。

    例:    string path = Directory.GetCurrentDirectory();            

       Console.WriteLine(path);            

       Console.ReadKey();      //结果:"D:\lianxi\作业\深考与浅考\bin\Debug"   

 

       Directory.SetCurrentDirectory(@"R:\");            

       string path = Directory.GetCurrentDirectory();            

       Console.WriteLine(path);           

         Console.ReadKey();   //结果:"R:\"  结果被Directory.SetCurrentDirectory(),改动了,但是这个程序本身并没有移动位置。  

2   Assembly.GetExecutingAssembly().Location;   //推荐时用   

      需要引用命名空间:   

            using System.Runtime.Serialization.Formatters.Binary;

            using System.Reflection;   

      例:    string path = Assembly.GetExecutingAssembly().Location;            

          Console.WriteLine(path);            

          Console.ReadKey();

 用二进制的方法完成深拷贝  

       例:   

       MyClass mycla = new MyClass();            

       mycla.Num = 20;            

       mycla.C = new MyClass1();            

       mycla.C.Num = 30;

 

              MyClass mycla3=null;            

       MemoryStream memory = new MemoryStream(); //使用内存流,比使用FileStream运行要快要方便 而且可以避免损伤硬盘,               using (memory)

              {                

         BinaryFormatter bf = new BinaryFormatter(); //添加命名空间using

         System.Runtime.Serialization.Formatters.Binary;                

         bf.Serialize(memory, mycla);               

           memory.Position = 0;//让“光标”的位置回到开始,由于当二进制序列化完成以后,“光标”位置是在末尾。此“光标”是指当前流中的位置;若是没有让它的位置修改为0,那么就不能将文件反序列化;                

         mycla3 = (MyClass)bf.Deserialize(memory);            

      }    

 

[Serializable]    

class MyClass    

{        

  public int Num;        

    public MyClass1 C;        

    public MyClass Clone()        

   {            

     return (MyClass)base.MemberwiseClone();        

   }        

   public MyClass DeepClone()        

  {            

    MyClass m = (MyClass)base.MemberwiseClone();            

     m.C = new MyClass1();            

    m.C.Num = this.C.Num;            

    return m;        

   }       

}    

[Serializable]    

class MyClass1    

{     

  public int Num;    

}

+++++++++++++++

这是本人的学习笔记,拿来分享一下

转载于:https://www.cnblogs.com/yingFly/archive/2012/07/04/MemberwiseClone.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值