談談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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Java8新特性】面試官:談談Java8中的Stream API有哪些終止操作?Java面試API
- 談談java的類與物件Java物件
- 談談JavaScript中建立物件(Object)JavaScript物件Object
- 談談 Object.prototype.toString 。Object
- 談談 Promise 以及實現 Fetch 的思路Promise
- 大家談談struts的分頁實現吧
- 淺談Object Pascal的指標Object指標
- 淺談MFC中超類化技術的實現 (轉)
- JQuery外掛定義&&談談jquery的實現jQuery
- 【譯】談談“typeof null為object”這一bug的由來NullObject
- 談談fork/join實現原理
- 談談實現瀑布流佈局的幾種思路
- 談談SSO單點登入的設計實現
- 深入談談String.intern()在JVM的實現JVM
- 淺談Innodb的鎖實現
- PHP實現守護程式的啟動和終止操作PHP
- 再談AbstractQueuedSynchronizer3:基於AbstractQueuedSynchronizer的併發類實現
- 談談物理伺服器的安全伺服器
- 【雜談】Remember-Me的實現REM
- 談Objective-C Block的實現ObjectBloC
- 來談談限流-從概念到實現
- 談談 C++ STL 中的迭代器C++
- 談談mac機器和Sun的解密Mac解密
- 談談實現資料價值的四大要素
- 談一談如何降低設計在實現中的損耗!
- 從原始碼的角度來談一談HashMap的內部實現原理原始碼HashMap
- 終止指定埠的程式
- 談談Java常用類庫中的設計模式 - Part ⅠJava設計模式
- 談談Hadoop MapReduce和Spark MR實現HadoopSpark
- 前端談談實現五子棋前端
- 談談限流演算法,以及Redisson實現演算法Redis
- 談一談Python中的裝飾器Python
- 通俗易懂的談談裝飾器模式模式
- 從 SAP 幫助文件的頁面,談談 SAP Content Management 的實現
- 淺談 Dart 類與類的基本方法Dart
- 淺談如何實現自定義的 iterator
- 淺談php變數的實現-PHPPHP變數
- 淺談Node中module的實現原理