程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 之 System.Object

C# 之 System.Object

編輯:C#入門知識

System.Object
C#中所有的類都直接或間接繼承自System.Object類,這使得C#中的類得以單根繼承。如果我們沒有明確指定繼承類,編譯器缺省認為該類繼承自System.Object類。System.Object類也可用小寫的object關鍵字表示,兩者完全等同。
因為所有的類都繼承與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
<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjxicj4KPHByZSBjbGFzcz0="brush:java;">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接口








  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved