C#之System.Object

一.前言

  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());
}
原文地址:https://www.cnblogs.com/shadoll/p/14523621.html