Interface继承至System.Object?
? ?這其實是個很基礎的問題,在我們學習C#類型的時候第一句就是所有的對象都繼承至System.Object。今天一個同事問我Interface繼承之System.Object。所以才有了本文。
? 在這里我只從幾個方面簡單的說明:
? 1:從語義:
???? Interface在oo中表示一組行為的集合,是高層次的抽象,契約,一種穩定的表現。好比我們生活的公司和員工之間的合同,雙方都必須遵循。所以我們的接口必須是一個干凈純潔的體系。加入interface繼承之System.Object,這以為這是不是,Interface有Equal,ToString等方法?這明顯破壞了接口的干凈體系。
2:實踐(C#):
?? 如果interface繼承之System.Object,這我們可以從System.Type獲取其基類:
如下測試:
public interface Itest{}
public class test{}
typeof(Itest).BaseTye//為null
typeof(test).BaseType//System.Object.
3:我們從IL指令來看(這也是最有力的證明):
我們先寫一個接口和一個類,他們都是空實現:
namespace ConsoleApplication1?
{?
??? public class test?
??? {?
??? }
??? public interface Itest?
??? {?
??? }?
}
?
在反編譯查看IL:
test clas:
而interface Itest的IL:
從上面兩個IL比較我們可以清晰的看出來class有顯示的extends [mscorlib]System.Object,而接口沒有,本篇的答案到這里你應該很清晰吧。這里還需要說明的是他們都是class,說明都是一種類型,而interface是一種特殊的類型。
接口能定義什么?接口能定義行為(方法),無參屬性(屬性,又稱守信),有參屬性(索引),不能定義私例字段,定義都是對編譯器都是一組方法行為。
?? 在最后我們在來說說前面說的“所有的對象都繼承至System.Object”,這是真的嘛?在c#的編譯過程中為我們提供了一個選項NOAUTOINHERIT,是的我們可以為自定義類型去掉默認的System.Object的基類。這就打破了System.Object創世之祖的戒律。
作者:破??狼?
出處:http://www.cnblogs.com/whitewolf/?
本文版權歸作者,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。該文章也同時發布在我的獨立博客中-個人獨立博客、博客園--破狼和51CTO--破狼。http://www.cnblogs.com/whitewolf/archive/2012/05/23/2514123.html
總結
以上是生活随笔為你收集整理的Interface继承至System.Object?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RabbitMQ 一二事(2) - 工作
- 下一篇: tabBar的图标不被系统渲染