zoukankan      html  css  js  c++  java
  • win10 uwp clone

    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 + "
    ");
                    }
                    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;
            }
  • 相关阅读:
    decode函数
    自我介绍
    语法》第六章 数组
    语法》第二章 数据类型
    语法》第四章 字符串
    语法》第七章 函数
    取模和取余的区别
    语法》第五章 对象
    语法》第三章 数值
    语法》第一章 基本语法
  • 原文地址:https://www.cnblogs.com/lindexi/p/12087707.html
Copyright © 2011-2022 走看看