日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Interface继承至System.Object?

發布時間:2025/7/14 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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?的全部內容,希望文章能夠幫你解決所遇到的問題。

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