日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

第4章 类型基础 -- 4.1 所有类型都从System.Object派生

發布時間:2025/7/14 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第4章 类型基础 -- 4.1 所有类型都从System.Object派生 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

4.1 所有類型都從System.Object派生

?

“運行時”要求每個類型最終都從System.Object類型派生。

由于所有類型最終都從System.Object派生,所以每個類型的每個對象都保證了一組最基本的方法。

System.Object類提供了如下表所示的公共實例方法:

表4-1 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所示的受保護方法。

表4-2 System.Object的受保護方法
MemberwiseClone 

這個非虛方法創建類型的新實例,并將新對象的實例字段設與?this?對象的實例字段完全一致。

返回對新實例的引用(作者在這段話里引用了兩種不同的“實例”。一種是類的實例,也就是對象;另一種是類中定義的實例字段。

所謂“實例字段”,就是指非靜態字段,有時也稱為“實例成員”。簡單地說,實例成員屬于類的對象,靜態成員屬于類。 --譯注)。

Finalize 

在垃圾回收器判斷對象應該作為垃圾被回收之后,在對象的內存被實際回收之前,會調用這個虛方法。

需要在回收內存前執行清理工作的類型應重寫該方法。

“托管堆和垃圾回收”會更詳細地討論這個重要的方法。

?

?

?

?

?

?

?

?

?

?

?

CLR要求所有對象都用?new?操作符創建。以下代碼展示了如何創建一個?Employee?對象:

Employee employee = new Employee("ConstructorParam1");

以下是?new?操作符所做的事情:

  • 計算類型及其所有基類型(一直到System.Object,雖然它沒有定義自己的實例字段)中定義的所有實例字段需要的字節數。堆上每個對象都需要一些額外的成員(稱為overhead成員,或者說“開銷成員” --譯注),包括“類型對象指針”(type object pointer)和“同步塊索引”(sync block index)。CLR利用這些成員管理對象。額外成員的字節數要計入對象大小。
  • 從托管堆中分配類型要求的字節數,從而分配對象的內存,分配的所有字節都設為零(0)。
  • 初始化對象的“類型對象指針”和“同步塊索引”成員。
  • 調用類型的實例構造器,傳遞在?new??調用中指定的實參(上例就是字符串"ConstructorParam1")。大多數編譯器都在構造器中自動生成來調用基類構造器。每個類型的構造器都負責初始化該類型定義的實例字段。最終調用?System.Object?的構造器,該構造器什么都不做,簡單地返回。
  • new?執行了所有這些操作之后,返回指向新建對象的一個引用(或指針)。在前面的示例代碼中,該引用保存到變量employee中,后者具有?Employee?類型。

    Btw, 沒有和?new?操作符對應的?delete?操作符;換言之,沒有辦法顯式釋放已為對象分配的內存。CLR采用了垃圾回收機制,能自動檢測到一個對象不再被使用或訪問,并自動釋放對象的內存。

    ?

    轉載于:https://www.cnblogs.com/ethanwill/p/5770984.html

    總結

    以上是生活随笔為你收集整理的第4章 类型基础 -- 4.1 所有类型都从System.Object派生的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。