C# 之 System.Object

來源:互聯網
上載者:User

標籤:style   blog   http   使用   strong   os   

System.Object
    C#中全部的類都直接或間接繼承自System.Object類,這使得C#中的類得以單根繼承。假設我們沒有明白指定繼承類,編譯器預設覺得該類繼承自System.Object類。System.Object類也可用小寫objectkeyword表示,兩者全然等同。
    由於全部的類都繼承與System.Object,所以這些類都能夠訪問該類中受保護的成員和公用的成員。以下我們就一起來看看可使用的成員有哪些。

1.public Object()
    System.Object類型的建構函式,直接使用new Object()能夠用來建立對象;假設非Object類型,則由衍生類別型的建構函式自己主動調用。

2.public virtual bool Equals(Object obj)
    把調用該方法的對象與還有一個對象相比,假設它們相等,就返回true。預設的實現代碼會查看對象的參數是否引用了同一個對象(由於對象是參考型別)。假設想以不同的方式來比較對象,則能夠重寫該方法
    比如,比較兩個對象的狀態:public static bool Equals(Object objA,Object ObjB)
    靜態方法Equals(object objA,object objB)首先檢查兩個對象objA和objB是否都為null,假設是則返回true,否則進行objA.Equals(objB)調用並返回其值。問題歸結到執行個體方法Equals(object obj)。該方法預設的實現事實上就是{return this= =obj;}也就是推斷兩個對象是否引用相等。
    該方法返回true的條件:objA和objB是同一個執行個體或著objA和objB都是null或者objA.Equals(objB)

3.public virtual int GetHashCode()
    用作對象的散列函數,這是一個必選函數,返回一個以壓縮形式標識的對象狀態的值。適用於雜湊演算法和諸如雜湊表之類的資料結構。
    假設兩個對象的比較結果相等,則每一個對象的 GetHashCode 方法都必須返回同一個值。可是,假設兩個對象的比較結果不相等,則這兩個對象的 GetHashCode 方法不一定返回不同的值。
    一個對象的 GetHashCode 方法必須總是返回同一個雜湊碼,但前提是沒有改動過對象狀態,對象狀態用來確定對象的 Equals 方法的返回值。請注意,這僅適用於應用程式的當前執行,再次執行該應用程式時可能會返回還有一個雜湊碼。

4.public Type GetType()
    以System.Type對象的形式返回對象的類型

namespace ConsoleApplication4{    class Program    {        static void Main(string[] args)        {            MyBaseClass myBase=new MyBaseClass();            MyDerivedClass myDerived=new MyDerivedClass ();            object o=myDerived ;            MyBaseClass b=myDerived;            Console.WriteLine("mybase:Type is {0}",myBase.GetType ());            Console.WriteLine("myDerived:Type is {0}",myDerived .GetType ());            Console.WriteLine("object o=myDerived:Type is {0}",o.GetType ());            Console.WriteLine("MyCassClass b=myDerived:Type is {0}",b.GetType ());        }    }    public class MyBaseClass:object     {    }    public class MyDerivedClass:MyBaseClass     {    }


5.public static bool ReferenceEquals(Object objA,Object objB)
    這種方法比較傳送給它的兩個對象,看看他們是否是同一個執行個體的引用。假設objA與objB是同樣的執行個體,或者假設二者都是為空白引用,則為true;否則為false

class Program    {        static void Main(string[] args)        {            object o = null;            object p = null;            object q = new object();            Console.WriteLine(object.ReferenceEquals(o, p));            p = q;            Console.WriteLine(object.ReferenceEquals(p, q));            Console.WriteLine(object.ReferenceEquals(o, p));         }    }


6.protected Object MemberWiseClone()
    通過建立一個新對象執行個體並複製成員,以複製該對象。成員拷貝不會得到這些成員的新執行個體。新對象的不論什麼參考型別成員都將引用於源類同樣的對象,這種方法是受保護的,所以僅僅能在類或派生的類中使用

class MyDerivedClass:MyBaseClass     {        static void Main(string[] args)        {            MyDerivedClass m1 = new MyDerivedClass();            m1.age=42;            m1.name="Sam";            MyDerivedClass m2 = (MyDerivedClass)m1.MemberwiseClone();                        Console.WriteLine(m2.name);            Console.WriteLine(m2.age);        }    }    class MyBaseClass    {        public string name;        public int age;    }


7.public virtual string ToString()
    返回一個相應於執行個體的字串。預設情況下,這是一個類類型的限定名稱,但能夠重寫它,給類型提供合適的實現方式。預設情況下返回的是該對象所屬類型的全名稱。繼承類能夠重寫該方法,以便自己定義顯示輸出內容,假設繼承類須要控制很多其它格式化輸出,則須要實現IFormattable介面








相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.