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;
}
~~~
- 前言
- UWP win10 app 新關鍵字x:Bing
- win10應用 UWP 使用MD5算法
- win10 UWP讀寫文件
- UWP appButtonBar樣式
- C# 6.0 $&quot;Hello {csdn}&quot;
- Win10 UWP xaml 延遲加載元素
- UWP xaml 圓形頭像
- UWP 繪制圖形
- win10 uwp 通知Toast
- win10 UWP 顯示地圖
- win10 uwp 參考
- win10 uwp clone
- win10 uwp 裝機必備應用 含源代碼
- RichEditBox 使用自定義菜單
- win10 UWP FlipView
- win10 UWP 獲取系統信息
- win10 UWP 申請微軟開發者
- win10 UWP button
- win10 UWP Markdown 含源代碼
- win10 UWP 應用設置
- win10 UWP 九幽數據分析
- win10 UWP 圓形等待
- win10 UWP 標題欄后退
- win10 UWP 單元測試
- win10 UWP 你寫我讀
- win10 UWP RSS閱讀器
- win10 UWP MessageDialog 和 ContentDialog
- win10 UWP Hmac
- win10 UWP GET Post
- Win10 UWP Intro to controls and events
- win10 UWP Controls by function
- win10 uwp App-to-app communication 應用通信