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";

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

  本文来自marin的博客,原文地址:http://www.cnblogs.com/malin/archive/2011/10/27/Silverlight_Clone.html

posted @ 2012-02-15 17:09  左手边的爱  阅读(301)  评论(0编辑  收藏  举报