一 ICloneable
说明:浅拷贝指仅拷贝值类型,深拷贝指拷贝值类型和引用类型
class
Program
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
static void Main(string[] args)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Employee emp1 = new Employee(128, "Tim");
emp1.HomeAddress = new Address("Guangdong", "Guangzhou", "Haizhu");
Employee emp2 = (Employee)emp1.Clone();
emp1.ShowInfo();
emp2.ShowInfo();
emp2.WorkNum = 200;
emp2.Name = "Snake";
emp2.HomeAddress.Street = "Tianhe";
emp1.ShowInfo();
emp2.ShowInfo();
Console.ReadLine();
}
}
class
Employee : ICloneable
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
public int WorkNum;
public string Name;
public Address HomeAddress;
public Employee(int workNum, string name)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
this.WorkNum = workNum;
this.Name = name;
}
public void ShowInfo()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Console.WriteLine("WorkNum:{0} Name:{1} HomeAddres:{2} ", this.WorkNum, this.Name, this.HomeAddress);
}
// shallow cloning
//public object Clone()
//{
// Employee emp = new Employee(this.WorkNum, this.Name);
// emp.HomeAddress = this.HomeAddress;
// return emp;
//}
// deep cloning
public object Clone()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Employee emp = new Employee(this.WorkNum, this.Name);
emp.HomeAddress = new Address(this.HomeAddress.Province, this.HomeAddress.City, this.HomeAddress.Street);
return emp;
}
}
class
Address
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
public string Province;
public string City;
public string Street;
public Address(string province, string city, string street)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
this.Province = province;
this.City = city;
this.Street = street;
}
public override string ToString()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return string.Format("{0} {1} {2}", this.Province, this.City, this.Street);
}
}
二 ICompareable
class
Program
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
static void Main(string[] args)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Complex num1 = new Complex(2, 3);
Complex num2 = new Complex(3, 2);
Console.WriteLine("num1 = {0}", num1.ToString());
Console.WriteLine("num2 = {0}", num2.ToString());
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
//Console.WriteLine("num1 CompareTo num2 ? {0}", num1.CompareTo(num2));
Console.WriteLine("num1 CompareTo num2 ? {0}", num1.CompareTo("haha"));
}
catch (Exception ex)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
}
class
Complex : IComparable
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
public int real;
public int imaginary;
public Complex(int real, int imaginary)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
this.real = real;
this.imaginary = imaginary;
}
public double Module()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return Math.Sqrt(Math.Pow(this.real, 2) + Math.Pow(this.imaginary, 2));
}
public override string ToString()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return string.Format("{0} + {1}i", this.real, this.imaginary);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
implement IComparable interface#region implement IComparable interface
public int CompareTo(object obj)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (obj is Complex)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Complex other = (Complex)obj;
return this.Module().CompareTo(other.Module());
}
throw new ArgumentException("Object is not an Complex.");
}
#endregion
}
三 ICompareableGeneric
class
Program
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
static void Main(string[] args)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Complex num1 = new Complex(2, 3);
Complex num2 = new Complex(3, 2);
Complex num3 = null;
Console.WriteLine("num1 = {0}", num1.ToString());
Console.WriteLine("num2 = {0}", num2.ToString());
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
//Console.WriteLine("num1 CompareTo num2 ? {0}", num1.CompareTo(num2));
Console.WriteLine("num1 CompareTo num2 ? {0}", num1.CompareTo(num3));
}
catch (Exception ex)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
}
class
Complex : IComparable
<
Complex
>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
public int real;
public int imaginary;
public Complex(int real, int imaginary)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
this.real = real;
this.imaginary = imaginary;
}
public double Module()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return Math.Sqrt(Math.Pow(this.real, 2) + Math.Pow(this.imaginary, 2));
}
public override string ToString()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return string.Format("{0} + {1}i", this.real, this.imaginary);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
implement IComparable
generic interface#region implement IComparable<Complex> generic interface
public int CompareTo(Complex other)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (other == null) throw new NullReferenceException();
return this.Module().CompareTo(other.Module());
}
#endregion
四 IEqualable
class
Program
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
static void Main(string[] args)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Complex num1 = new Complex(2, 3);
Complex num2 = new Complex(2, 3);
Complex num3 = null;
Console.WriteLine("num1 = {0}", num1.ToString());
Console.WriteLine("num2 = {0}", num2.ToString());
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Console.WriteLine("num1 Equals num2 ? {0}", num1.Equals(num2));
Console.WriteLine("num1 Equals num2 ? {0}", num1.Equals("haha"));
}
catch (Exception ex)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
}
class
Complex : IEquatable
<
Complex
>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
public int real;
public int imaginary;
public Complex(int real, int imaginary)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
this.real = real;
this.imaginary = imaginary;
}
public double Module()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return Math.Sqrt(Math.Pow(this.real, 2) + Math.Pow(this.imaginary, 2));
}
public override string ToString()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return string.Format("{0} + {1}i", this.real, this.imaginary);
}
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
implement IEquatable
interface#region implement IEquatable<Complex> interface
public override bool Equals(object other)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return Equals(other as Complex);
}
public bool Equals(Complex other)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (other == null) return false;
return (this.real == other.real && this.imaginary == other.imaginary);
}
#endregion
}
五 IFormattable
class
Program
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
static void Main(string[] args)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Complex num1 = new Complex(2, 3);
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Console.WriteLine("num1 = {0}", num1);
Console.WriteLine("num1 = {0:N}", num1);
Console.WriteLine("num1 = {0:X}", num1);
}
catch (Exception ex)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
}
class
Complex : IFormattable
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
public int real;
public int imaginary;
public Complex(int real, int imaginary)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
this.real = real;
this.imaginary = imaginary;
}
public double Module()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return Math.Sqrt(Math.Pow(this.real, 2) + Math.Pow(this.imaginary, 2));
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
implement IFormattable interface#region implement IFormattable interface
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public override string ToString() ...{ return ToString(null, null); }
public string ToString(string format, IFormatProvider fp)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
// If no format is passed, display like this: x + yi
if (format == null) return string.Format("{0} + {1}i", this.real, this.imaginary);
// For "N" formatting, display like this: (x,y)
if (format == "N") return string.Format("({0},{1})", this.real, this.imaginary);
// For any unrecognized format, throw an exception.
throw new FormatException(string.Format("Invalid format string: '{0}'.", format));
}
#endregion
}
六 Destructor
class
Program
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
static void Main(string[] args)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Create();
Console.WriteLine("After DemoClass created.");
Console.ReadLine();
GC.Collect();
Console.ReadLine();
}
static void Create()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
DemoClass demo = new DemoClass();
}
}
class
DemoClass
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
public DemoClass()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Console.WriteLine("Constructor is called.");
}
~DemoClass()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Console.WriteLine("Destructor is called.");
}
}
七 IDisposeable
class
Program
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
static void Main(string[] args)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Create();
Console.WriteLine("After DemoClass created.");
Console.ReadLine();
GC.Collect();
Console.ReadLine();
}
static void Create()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
//DemoClass demo = new DemoClass();
//demo.Dispose();
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
use using keyword#region use using keyword
using (DemoClass demo = new DemoClass())
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
// add code here
}
#endregion
}
}
class
DemoClass : IDisposable
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
public DemoClass()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Console.WriteLine("Constructor is called.");
}
~DemoClass()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Console.WriteLine("Destructor is called.");
}
public void Dispose()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Console.WriteLine("Dispose is called.");
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
GC.SuppressFinalize#region GC.SuppressFinalize
GC.SuppressFinalize(this);
#endregion
}
}