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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Interface继承至System.Object?

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

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