一.前言
System.Object在.Net中是所有类型的基类,任何类型都可以直接或间接地继承System.Object。没有指定基类的类型都默认继承System.Object。
二.特性
所有类型都继承于System.Object,所以所有类型都具有System.Object的特性。
1.Object()
System.Object类型的构造函数。在创建对象时,如果类型是Object,会直接调用。如果类型非Object类型,由派生类的构造函数自动调用。
2.Equals()
Equals(Object obj),虚方法,判断该对象与作为参数的对象是否相同,默认是对比引用是否相同。可以通过重写来实现不同方式的对比。
Equals(Object objA,Object objB),静态方法。判断两个对象是否为相同的引用,是就返回true。如果都为null,也返回true。如果不是相同的引用,它会默认调用objA.Equals(objB)的方法。
3.ReferenceEquals()
ReferenceEquals(Object objA,Object objB),静态方法。仅判断两个对象是否为相同的引用。如果Equals(objA,objB)方法,在校验两个对象不为相同的引用,会执行objA.Equals(objB)方法。
4.GetHashCode()
返回对象的哈希值。
5.GetType()
以System.Type对象的形式返回对象的类型。
public class A { } public class B : A { } //调用 public static void Main(string[] args) { A a = new A(); B b = new B(); object o = b; A b2 = b; Console.WriteLine("a:type is {0}",a.GetType()); Console.WriteLine("b:type is {0}", b.GetType()); Console.WriteLine("o:type is {0}", o.GetType()); Console.WriteLine("b2:type is {0}", b2.GetType()); } //结果 a:type is app.A b:type is app.B o:type is app.B b2:type is app.B
6.ToString()
返回一个对应于对象实例的字符串。默认是这个类的类型名称。可以给这个类提供一个合适的方法去重写它。
7.MemberwiseClone()
通过创建一个新对象实例并复制成员,以复制该对象。成员拷贝不会得到成员的新实例。新对象的任何引用类型的成员都将引用源类相同的对象,这个方法是受保护的,所以只能在类或派生类中使用。
public class A { public string Name { get; set; } public int Age { get; set; } public B B { get; set; } public A Clone() { return (A)this.MemberwiseClone(); } } public class B { public string Name { get; set; } } //调用 public static void Main(string[] args) { //创建A A a = new A(); a.Name = "aa"; a.Age = 18; //创建B B b = new B(); b.Name = "bb"; a.B = b; Console.WriteLine("b的哈希" + b.GetHashCode()); Console.WriteLine("====源对象===="); Console.WriteLine(a.Name); Console.WriteLine(a.Age); Console.WriteLine("a的哈希" + a.GetHashCode()); Console.WriteLine("a中b的哈希" + a.B.GetHashCode()); A a2 = a.Clone(); Console.WriteLine("====复制对象===="); Console.WriteLine(a2.Name); Console.WriteLine(a2.Age); Console.WriteLine("a2的哈希" + a2.GetHashCode()); Console.WriteLine("a2中b的哈希" + a2.B.GetHashCode()); }