談談Object類的終止器的實現!
在用Reflector載入mscorlib.dll後,看到System.Object類中的Finalize方法是用override修飾的.
Object是根類,顯然不可能重寫其他方法,這裡應該是反編譯工具生成的結果不正確,我們來驗證這一點:
大家都知道,為了減輕開發人員的負擔,C#中為Finalize方法的定義提供了特殊的語法,用這個語法來定義Finalize方法,編譯器可以自動生成合適的異常處理的程式碼,並呼叫基類的Finalize方法!
Object類的Finalize方法的原始碼是這樣的:
~Object()
{
}
可以看到這個方法什麼也沒有做!
我們使用ILDasm工具來檢視IL程式碼:
.method family hidebysig virtual instance void
Finalize() cil managed
{
.custom instance void System.Runtime.ConstrainedExecution.ReliabilityContractAttribute::.ctor(valuetype System.Runtime.ConstrainedExecution.Consistency,
valuetype System.Runtime.ConstrainedExecution.Cer) = ( 01 00 03 00 00 00 02 00 00 00 00 00 )
// 程式碼大小 1 (0x1)
.maxstack 8
IL_0000: ret
} // end of method Object::Finalize
這實際上是一個Virtual方法,並不是override其他方法
一般類中(如果需要的話)都是重寫這個方法來新增終止器實現的。
Object是根類,顯然不可能重寫其他方法,這裡應該是反編譯工具生成的結果不正確,我們來驗證這一點:
大家都知道,為了減輕開發人員的負擔,C#中為Finalize方法的定義提供了特殊的語法,用這個語法來定義Finalize方法,編譯器可以自動生成合適的異常處理的程式碼,並呼叫基類的Finalize方法!
Object類的Finalize方法的原始碼是這樣的:
~Object()
{
}
可以看到這個方法什麼也沒有做!
我們使用ILDasm工具來檢視IL程式碼:
.method family hidebysig virtual instance void
Finalize() cil managed
{
.custom instance void System.Runtime.ConstrainedExecution.ReliabilityContractAttribute::.ctor(valuetype System.Runtime.ConstrainedExecution.Consistency,
valuetype System.Runtime.ConstrainedExecution.Cer) = ( 01 00 03 00 00 00 02 00 00 00 00 00 )
// 程式碼大小 1 (0x1)
.maxstack 8
IL_0000: ret
} // end of method Object::Finalize
這實際上是一個Virtual方法,並不是override其他方法
一般類中(如果需要的話)都是重寫這個方法來新增終止器實現的。
Reflector可能沒有正確的解析Object類的所以這裡Reflector的反編譯結果有誤,並不是override其他方法。
原文地址:http://www.cnblogs.com/xuefeng1982/archive/2009/10/21/1587634.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-617180/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 類索引器的老生常談索引
- 談談 Promise 以及實現 Fetch 的思路Promise
- 談談JavaScript中建立物件(Object)JavaScript物件Object
- 【Java8新特性】面試官:談談Java8中的Stream API有哪些終止操作?Java面試API
- 【譯】談談“typeof null為object”這一bug的由來NullObject
- 深入談談String.intern()在JVM的實現JVM
- 談談fork/join實現原理
- 談談SSO單點登入的設計實現
- 談談實現瀑布流佈局的幾種思路
- 淺談Innodb的鎖實現
- 【雜談】Remember-Me的實現REM
- 談談 Spring 的過濾器和攔截器Spring過濾器
- 談談實現資料價值的四大要素
- 從原始碼的角度來談一談HashMap的內部實現原理原始碼HashMap
- 從 SAP 幫助文件的頁面,談談 SAP Content Management 的實現
- 來談談限流-從概念到實現
- 談談Hadoop MapReduce和Spark MR實現HadoopSpark
- 談談 C++ STL 中的迭代器C++
- 談一談Python中的裝飾器Python
- 談談Java常用類庫中的設計模式 - Part ⅠJava設計模式
- 前端談談實現五子棋前端
- 談談限流演算法,以及Redisson實現演算法Redis
- 淺談Node中module的實現原理
- 淺談php變數的實現-PHPPHP變數
- 淺談 instanceof 和 typeof 的實現原理
- 淺談如何實現自定義的 iterator
- 淺談 Dart 類與類的基本方法Dart
- 談談目前的安全發展與現狀
- 談談我對物件導向以及類與物件的理解物件
- 以 ZGC 為例,談一談 JVM 是如何實現 Reference 語義的GCJVM
- 談談 Java 類載入機制Java
- 終止指定埠的程式
- [分享]談談目前的安全發展與現狀
- 【雜談】Java I/O的底層實現Java
- 非酋的福音?談一談遊戲內的偽隨機機制以及實現遊戲隨機
- 淺談react diff實現React
- 淺談Java中的內部類Java
- 談談保護敏感資料的最佳實踐
- 談談機器學習模型的可解釋性機器學習模型