第4章 类型基础 -- 4.1 所有类型都从System.Object派生
4.1 所有類型都從System.Object派生
?
“運行時”要求每個類型最終都從System.Object類型派生。
由于所有類型最終都從System.Object派生,所以每個類型的每個對象都保證了一組最基本的方法。
System.Object類提供了如下表所示的公共實例方法:
| Equals | 若兩個對象具有相同的值,就返回?true?。詳情請參考"對象相等性和同一性" |
| GetHashCode | 返回對象的值的哈希碼。如果某個類型的對象要在哈希表集合(比如 Dictionary )中作為鍵使用,類型應重寫該方法。 方法應該為不同的對象提供良好分布(是指針對所有輸入,GetHashCode生成的哈希值應該在所有整數中產生一個隨機的分布。?--譯注)。 將這個方法設計到?Object?中并不恰當。大多數類型永遠不會在哈希表中作為鍵使用:該方法本該在接口中定義。 |
| ToString | 默認返回類型的完整名稱(this.GetType().FullName)。但經常重寫該方法來返回包含對象狀態表示的?String?對象。 例如,核心類型(如?Boolean?和?Int32?)重寫該方法來返回它們的值的字符串表示。 另外,經常處于調試的目的而重寫該方法:調用后獲得一個字符串,顯示對象各字段的值。事實上,Microsoft Visual Studio的調試器會自動調用該函數來顯示對象的字符串表示。 注意,ToString?理論上應察覺與調用線程關聯的?CultureInfo?并采取相應行動。 “字符、字符串和文本處理”將更詳細地討論ToString |
| GetType | 返回從 Type 派生的一個類型的實例,指出調用?GetType?的那個對象是什么類型。 返回的?Type?對象可以和反射類配合,獲取與對象的類型有關的元數據信息。反射將在“程序集加載和反射”討論。 GetType?是非虛方法,目的是防止類重寫該方法,隱瞞其類型,進而破壞類型安全性。 |
?
?
?
?
?
?
?
?
?
?
?
?
?
?
此外,從System.Object派生的類型能訪問如表4-2所示的受保護方法。
| MemberwiseClone | 這個非虛方法創建類型的新實例,并將新對象的實例字段設與?this?對象的實例字段完全一致。 返回對新實例的引用(作者在這段話里引用了兩種不同的“實例”。一種是類的實例,也就是對象;另一種是類中定義的實例字段。 所謂“實例字段”,就是指非靜態字段,有時也稱為“實例成員”。簡單地說,實例成員屬于類的對象,靜態成員屬于類。 --譯注)。 |
| Finalize | 在垃圾回收器判斷對象應該作為垃圾被回收之后,在對象的內存被實際回收之前,會調用這個虛方法。 需要在回收內存前執行清理工作的類型應重寫該方法。 “托管堆和垃圾回收”會更詳細地討論這個重要的方法。 |
?
?
?
?
?
?
?
?
?
?
?
CLR要求所有對象都用?new?操作符創建。以下代碼展示了如何創建一個?Employee?對象:
Employee employee = new Employee("ConstructorParam1");
以下是?new?操作符所做的事情:
new?執行了所有這些操作之后,返回指向新建對象的一個引用(或指針)。在前面的示例代碼中,該引用保存到變量employee中,后者具有?Employee?類型。
Btw, 沒有和?new?操作符對應的?delete?操作符;換言之,沒有辦法顯式釋放已為對象分配的內存。CLR采用了垃圾回收機制,能自動檢測到一個對象不再被使用或訪問,并自動釋放對象的內存。
?
轉載于:https://www.cnblogs.com/ethanwill/p/5770984.html
總結
以上是生活随笔為你收集整理的第4章 类型基础 -- 4.1 所有类型都从System.Object派生的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Navicat远程连接不上mysql解决
- 下一篇: http://www.cnblogs.c