silverlight 属性的Clone

        ///   <summary>
        
///  设置实体对象的修改属性 
        
///  说明:需要复制一个实体类,而又不希望两个使用同一个内存地址,用反射来实现这种功能:把oldObj 赋值给 newObj
        
///  可以将实体类直接继承ICloneable接口,并用如上方法来实现Clone()方法. 
        
///  现在有不少架构直接使用自动代码生成器,也可以不使用反射直接每个属性值进行拷贝亦可
        
///   </summary>
        
///   <param name="oldObj"> 原来对象 </param>
        
///   <param name="newObj"> 新对象 </param>
         public  static  void CloneEntityObject( object oldObj,  object newObj)
        {
             if (oldObj.Equals(newObj))
            {
                 return;
            }
             if (oldObj.GetType() != newObj.GetType())
            {
                 return;
            }
            System.Reflection.PropertyInfo[] info = oldObj.GetType().GetProperties();
             foreach (System.Reflection.PropertyInfo property  in info)
            {
                newObj.GetType().GetProperty(property.Name).SetValue(newObj, oldObj.GetType().GetProperty(property.Name).GetValue(oldObj,  null),  null);
            }
        }

 在silverlight 中咱们会遇到这种情况: 

 

  var A= " a "; var B=A;

// 然后我修改B的值。

B= " b ";

// 你会发现 A="b";

这是因为通过赋值的时候A、B用了同一个内存地址。 你是否发现这是很严重的问题...所以咱们可以通过上边的方法来避免。

 

var A= " a "; var B= "";

CloneEntityObject(A,B); // 把A赋值给B

// 然后我修改B的值。

B= " b ";

// 你会发现 A任然等于"a";

一点工作中遇到的经验,希望对大家有帮助。

posted on 2011-10-27 13:54  marin 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/malin/archive/2011/10/27/SilverlightClone.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值