Csharp/C Sharp/Class Interface/Clone
Содержание
Copy a class
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Copy a class.
using System;
// Define a structure. class MyClass {
public int x;
}
// Now show a class object assignment. public class ClassAssignment {
public static void Main() { MyClass a = new MyClass(); MyClass b = new MyClass(); a.x = 10; b.x = 20; Console.WriteLine("a.x {0}, b.x {1}", a.x, b.x); a = b; b.x = 30; Console.WriteLine("a.x {0}, b.x {1}", a.x, b.x); }
}
</source>
Demonstrate ICloneable
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Demonstrate ICloneable.
using System;
class X {
public int a; public X(int x) { a = x; }
}
class Test : ICloneable {
public X o; public int b; public Test(int x, int y) { o = new X(x); b = y; } public void show(string name) { Console.Write(name + " values are "); Console.WriteLine("o.a: {0}, b: {1}", o.a, b); } // Make a deep copy of the invoking object. public object Clone() { Test temp = new Test(o.a, b); return temp; }
}
public class CloneDemo {
public static void Main() { Test ob1 = new Test(10, 20); ob1.show("ob1"); Console.WriteLine("Make ob2 a clone of ob1."); Test ob2 = (Test) ob1.Clone(); ob2.show("ob2"); Console.WriteLine("Changing ob1.o.a to 99 and ob1.b to 88."); ob1.o.a = 99; ob1.b = 88; ob1.show("ob1"); ob2.show("ob2"); }
}
</source>
Implements ICloneable
<source lang="csharp"> using System; using System.Text; using System.Collections.Generic; public class Employee : ICloneable {
public string Name; public string Title; public int Age; public Employee(string name, string title, int age) { Name = name; Title = title; Age = age; } public object Clone() { return MemberwiseClone(); } public override string ToString() { return string.Format("{0} ({1}) - Age {2}", Name, Title, Age); }
} public class Team : ICloneable {
public List<Employee> TeamMembers = new List<Employee>(); public Team() { } private Team(List<Employee> members) { foreach (Employee e in members) { TeamMembers.Add((Employee)e.Clone()); } } public void AddMember(Employee member) { TeamMembers.Add(member); } public override string ToString() { StringBuilder str = new StringBuilder(); foreach (Employee e in TeamMembers) { str.AppendFormat(" {0}\r\n", e); } return str.ToString(); } public object Clone() { return new Team(this.TeamMembers); }
} public class MainClass {
public static void Main() { Team team = new Team(); team.AddMember(new Employee("F", "Developer", 34)); team.AddMember(new Employee("K", "Tester", 78)); team.AddMember(new Employee("C", "Support", 18)); Team clone = (Team)team.Clone(); Console.WriteLine(team); Console.WriteLine(clone); Console.WriteLine(Environment.NewLine); team.TeamMembers[0].Name = "NewName"; team.TeamMembers[0].Title = "Manager"; team.TeamMembers[0].Age = 44; Console.WriteLine(team); Console.WriteLine(clone); }
}
</source>
System.Array and the Collection Classes:ICloneable 1
<source lang="csharp"> using System; class ContainedValue {
public ContainedValue(int count) { this.count = count; } public int count;
} class MyObject: ICloneable {
public MyObject(int count) { this.contained = new ContainedValue(count); } public object Clone() { Console.WriteLine("Clone"); return(new MyObject(this.contained.count)); } public ContainedValue contained;
} public class SystemArrayandtheCollectionClassesICloneable {
public static void Main() { MyObject my = new MyObject(33); MyObject myClone = (MyObject) my.Clone(); Console.WriteLine( "Values: {0} {1}", my.contained.count, myClone.contained.count); myClone.contained.count = 15; Console.WriteLine( "Values: {0} {1}", my.contained.count, myClone.contained.count); }
}
</source>
System.Array and the Collection Classes:ICloneable 2
<source lang="csharp"> using System; class ContainedValue {
public ContainedValue(int count) { this.count = count; } public int count;
} class MyObject {
public MyObject(int count) { this.contained = new ContainedValue(count); } public MyObject Clone() { return((MyObject) MemberwiseClone()); } public ContainedValue contained;
} public class SystemArrayandtheCollectionClassesICloneable2 {
public static void Main() { MyObject my = new MyObject(33); MyObject myClone = my.Clone(); Console.WriteLine("Values: {0} {1}",my.contained.count, myClone.contained.count); myClone.contained.count = 15; Console.WriteLine("Values: {0} {1}", my.contained.count, myClone.contained.count); }
}
</source>