clone 可以用MemberwiseClone来复制一个类

但这个复制是浅复制,创建一个新的object然后复制值字段,对于引用就直接复制引用,不复制引用的本身,指向同样引用

如果要复制引用,可以使用序列化和反序列化复制类

序列化和反序列化可以使用

序列化本来有BinaryFormatter 而现在没有了SoapFormatter

可以用的微软的XmlSerializer,需要using System.Xml.Serialization;

Nuget下载很多的json Newtonsoft.Json

需要在项目管理



安装

简单的通讯录

    public class caddressBook: notify_property
    {
        public caddressBook()
        {

        }
        /// <summary>
        /// 标识符
        /// </summary>
        public string id
        {
            set
            {
                _id = value;
                OnPropertyChanged();
            }
            get
            {
                return _id;
            }
        }
        /// <summary>
        /// 通讯人姓名
        /// </summary>
        public string name
        {
            set
            {
                _name = value;
                OnPropertyChanged();
            }
            get
            {
                return _name;
            }
        }
        /// <summary>
        /// 联系方式
        /// </summary>
        public string contact
        {
            set
            {
                _contact = value;
                OnPropertyChanged();
            }
            get
            {
                return _contact;
            }
        }
        /// <summary>
        /// 工作地点
        /// </summary>
        public string address
        {
            set
            {
                _address = value;
                OnPropertyChanged();
            }
            get
            {
                return _address;
            }
        }
        /// <summary>
        /// 城市
        /// </summary>
        public string city
        {
            set
            {
                _city = value;
                OnPropertyChanged();
            }
            get
            {
                return _city;
            }
        }
        /// <summary>
        /// 备注
        /// </summary>
        public string comment
        {
            set
            {
                _comment = value;
                OnPropertyChanged();
            }
            get
            {
                return _comment;
            }
        }
        /// <summary>
        /// 输入正确
        /// </summary>
        public bool accord
        {
            set
            {
                value = false;
            }
            get
            {
                if (string.IsNullOrEmpty(name))
                {
                    return false;
                }
                return true;
            }
        }

        private string _id;
        private string _name;
        private string _contact;
        private string _address;
        private string _city;
        private string _comment;
    }

notify_property是通知

    public class notify_property : INotifyPropertyChanged
    {
        public notify_property()
        {
            _reminder = new StringBuilder();
        }

        public event PropertyChangedEventHandler PropertyChanged;
        /// <summary>
        /// 一直添加value
        /// </summary>
        public string reminder
        {
            set
            {
                if (string.IsNullOrEmpty(value))
                {
                    _reminder.Clear();
                }
                else
                {
                    _reminder.Append(value + "\r\n");
                }
                OnPropertyChanged("reminder");
            }
            get
            {
                return _reminder.ToString();
            }
        }

        public void UpdateProper<T>(ref T properValue , T newValue , [System.Runtime.CompilerServices.CallerMemberName] string properName = "")
        {
            if (object.Equals(properValue , newValue))
                return;

            properValue = newValue;
            OnPropertyChanged(properName);
        }
        public void OnPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string name="")
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this , new PropertyChangedEventArgs(name));
            }
        }

        private StringBuilder _reminder;
    }

复制使用MemberwiseClone

        public object clone()
        {
            return this.MemberwiseClone();
        }

前台两个Grid,一个显示原有的,一个显示复制的

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition Width="auto"/>
        </Grid.ColumnDefinitions>
        <Grid Grid.Column="0">
            <Grid.RowDefinitions>
                <RowDefinition Height="auto" />
                <RowDefinition Height="auto" />
            </Grid.RowDefinitions>
            <TextBlock Text="通讯录" HorizontalAlignment="Center"/>
            <Grid Grid.Row="1">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="auto"/>
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto" />
                    <RowDefinition Height="auto" />
                </Grid.RowDefinitions>
                <TextBlock Text="id" Grid.Column="0" Grid.Row="0"/>
                <TextBox Text="{x:Bind view.addressBook.id,Mode=TwoWay}" Grid.Column="1" Grid.Row="0"/>
                <TextBlock Text="name" Grid.Column="0" Grid.Row="1"/>
                <TextBox Text="{x:Bind view.addressBook.name,Mode=TwoWay}" Grid.Column="1" Grid.Row="1"/>
            </Grid>
        </Grid>
        <Grid Grid.Column="1">
            <Grid.RowDefinitions>
                <RowDefinition Height="auto" />
                <RowDefinition Height="auto" />
            </Grid.RowDefinitions>
            <!--<TextBlock Text="通讯录" HorizontalAlignment="Center"/>-->
            <Grid Grid.Row="1">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="auto"/>
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto" />
                    <RowDefinition Height="auto" />
                </Grid.RowDefinitions>
                <TextBlock Text="id" Grid.Column="0" Grid.Row="0"/>
                <TextBox Text="{x:Bind view.clone.id,Mode=TwoWay}" Grid.Column="1" Grid.Row="0"/>
                <TextBlock Text="name" Grid.Column="0" Grid.Row="1"/>
                <TextBox Text="{x:Bind view.clone.name,Mode=TwoWay}" Grid.Column="1" Grid.Row="1"/>
            </Grid>
        </Grid>
        <Button Grid.Column="2" Content="确定" Click="{x:Bind view.cloneaddress}"/>
    </Grid>

viewModel

        public caddressBook addressBook
        {
            set;
            get;
        }=new caddressBook();

        public caddressBook clone
        {
            set;
            get;
        } = new caddressBook();

在ViewModel初始给addressBook id和name一个值

            addressBook.id = "id";
            addressBook.name = "name";

点击按钮复制clone值

        public void cloneaddress()
        {
            //clone = addressBook.clone() as caddressBook;
            caddressBook temp = new caddressBook();
            temp.id = "0";
            temp.name = "clone";

            clone.id = temp.id;
            clone.name = temp.name;
        }

直接复制clone会让引用没有指向复制的值

        public void cloneaddress()
        {
            //clone = addressBook.clone() as caddressBook;
            caddressBook temp = new caddressBook();
            temp = addressBook.clone() as caddressBook;

            clone.id = temp.id;
            clone.name = temp.name;
        }

可以复制

最笨的

        public object Clone()
        {
            caddressBook addressbook = new caddressBook();
            addressbook.id = id;
            addressbook.name = name;
            addressbook.contact = contact;
            addressbook.address = address;
            addressbook.city = city;
            addressbook.comment = comment;
            return addressbook;
        }
        public void cloneaddress()
        {
            //clone = addressBook.clone() as caddressBook;
            caddressBook temp = new caddressBook();
            //temp = addressBook.clone() as caddressBook;
            temp = addressBook.Clone() as caddressBook;

            clone.id = temp.id;
            clone.name = temp.name;
        }

可以复制

序列化XmlSerializer

        public object clonejson()
        {
            string str = JsonConvert.SerializeObject(this);
            return JsonConvert.DeserializeObject<caddressBook>(str);
        }
        public void cloneaddress()
        {
            //clone = addressBook.clone() as caddressBook;
            caddressBook temp = new caddressBook();
            //temp = addressBook.clone() as caddressBook;
            //temp = addressBook.Clone() as caddressBook;

            temp = addressBook.clonejson() as caddressBook;

            clone.id = temp.id;
            clone.name = temp.name;
        }

win10 uwp clone的更多相关文章

  1. win10 uwp 入门

    UWP是什么我在这里就不说,本文主要是介绍如何入门UWP,也是合并我写的博客. 关于UWP介绍可以参见:http://lib.csdn.net/article/csharp/32451 首先需要申请一 ...

  2. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

    安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...

  3. Win10 UWP开发系列:实现Master/Detail布局

    在开发XX新闻的过程中,UI部分使用了Master/Detail(大纲/细节)布局样式.Win10系统中的邮件App就是这种样式,左侧一个列表,右侧是详情页面.关于这种 样式的说明可参看MSDN文档: ...

  4. Win10 UWP开发实现Bing翻译

    微软在WP上的发展从原来的Win7到Win8,Win8.1,到现在的Win10 UWP,什么是UWP,UWP即Windows 10 中的Universal Windows Platform简称.即Wi ...

  5. Win10/UWP开发—使用Cortana语音与App后台Service交互

    上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...

  6. 【Win10 UWP】后台任务与动态磁贴

    动态磁贴(Live Tile)是WP系统的大亮点之一,一直以来受到广大用户的喜爱.这一讲主要研究如何在UWP应用里通过后台任务添加和使用动态磁贴功能. 从WP7到Win8,再到Win10 UWP,磁贴 ...

  7. 【Win10 UWP】URI Scheme(一):Windows Store协议的解析和使用

    协议是Windows Phone和Windows Store应用的一个重要特点,可以做到在不同应用之间进行互相呼起调用.小小协议,学问大着呢.我打算写几篇关于协议在UWP中使用的文章. 这一讲的主要对 ...

  8. 【Win10 UWP】QQ SDK(二):SDK的回调处理

    上一讲,我们介绍了QQ SDK的使用方法,请看<[Win10 UWP]QQ SDK(一):SDK基本使用方法> 一. 回调的基本形式 从前面的介绍中我们知道,我们的应用和QQ客户端之间需要 ...

  9. Win10 UWP应用发布流程

    简介 Win10 UWP应用作为和Win8.1 UAP应用不同的一种新应用形式,其上传至Windows应用商店的流程也有了一些改变. 这篇博文记录了我们发布一款Win10 UWP应用的基本流程,希望为 ...

随机推荐

  1. 201521123005 《java程序设计》 第七周学习总结

    1. 本周学习总结 参考资料: XMind 2. 书面作业 Q1ArrayList代码分析 1.1 解释ArrayList的contains源代码 ArrayList的contains源代码 /** ...

  2. 201521123101 《Java程序设计》第7周学习总结

    1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 contains()方法 public boolean contains(O ...

  3. 201521123026 《Java程序设计》第6周学习总结

    1. 本章学习总结 请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结 2. 书面作业 Q1.clone方法 1.1 Object对象中的clone方法是被prot ...

  4. 201521123038 《Java程序设计》 第一周学习总结

    201521123038 <Java程序设计> 第一周学习总结 1.本章学习总结 本周已掌握Java配置,初步认识Java运行软件和基本语法. Java语言语法和C语言基本类似,部分不同. ...

  5. 201521123040《Java程序设计》第1周学习总结

    1.本周学习总结 -初步接触JAVA,安装了JDK和eclipse,注册了码云,PTA,博客. -还没能熟悉eclipse,不能熟练把ec上的代码同步到码云. -不会编写程序,不了解JAVA的编写规则 ...

  6. 201521123076 《Java程序设计》 第十四周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...

  7. Java课设 彩票购买抽奖程序 个人博客

    一.团队课程设计博客链接 http://www.cnblogs.com/lyq063/p/7072507.html 二.自己的代码提交记录截图 三.自己负责模块或任务详细说明 用户注册信息的存储和登录 ...

  8. PHp连接数据库实现增删改查

    首页 删除 添加 添加处理页面 修改 修改处理页面

  9. 软件测试的cookie测试

    1.什么是cooike测试 Cookie是指网站用于辨别身份,进行会话(session)跟踪而存储在客户端的数据.它是有服务器产生并发送给客户端的.其用途是提供一个方便的功能以简化用户输入,节省访问页 ...

  10. [05] 利用private来封装

    我们知道,面向对象开发的三大特点是:封装性.继承性.多态性 所谓封装性,实际上是表达了一种信息隐藏.从表面上来阐述,就是使用private修饰符来对属性或者方法进行信息隐藏,而使用public的方法控 ...