您的位置:首页 > 其它

引用类型的赋值问题--.net 中的Deep Clone

2017-04-15 23:13 274 查看
为了在程序中批量传参数,我将参数封装到一个类中,在程序中有如下代码:

var myPanel = new PanelClass() { dictPanel = panelB.dictPanel, dictFilePanel = panelB.dictFilePanel };

panelB.Clear();

当执panelB执行了Clear之后,发现myPanel的相关属性也被Clear了。

后来查阅资料,问题是引用类型同时指向同一个实体,要想属性不被 Clear掉,

要进行Deep Clone。

public PanelClass Clone()

        {

            if(!typeof(PanelClass).IsSerializable)

            {

                throw new ArgumentException("The type must be serializable.","PanelClass");

            }

            if(Object.ReferenceEquals(this,null))

            {

                return default(PanelClass);

            }

            IFormatter formatter = new BinaryFormatter();

            Stream stream = new MemoryStream();

            using(stream)

            {

                formatter.Serialize(stream, this);

                stream.Seek(0, SeekOrigin.Begin);

                return (PanelClass)formatter.Deserialize(stream);

            }

        }

其中相关类头上要增加可序列化标志[Serializable],这样问题可正常解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: