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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

System.Object 是 .NET 中所有类型的根吗?

發(fā)布時(shí)間:2025/3/16 asp.net 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 System.Object 是 .NET 中所有类型的根吗? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

System.Object 是 .NET 中所有類型的根嗎?

?

Written by Allen Lee

?

這不是廢話嗎?每個(gè)人一接觸 .NET 就會被提醒任何類型都是直接或者間接繼承自 System.Object 的,即使 MSDN 也記錄著類似的話。事實(shí)果真如此嗎?如果你在命令行界面輸入 ilasm /?,將會發(fā)現(xiàn)這樣一個(gè)參數(shù):

/NOAUTOINHERIT Disable inheriting from System.Object by default

現(xiàn)在,我嘗試?yán)眠@個(gè)參數(shù)做一個(gè)沒有基類的托管類型。首先,打開記事本,寫下如下代碼:

//?Adam.cs

public?class?Adam
{
??
public?void?Hello()
??
{
????System.Console.WriteLine(
"I?have?no?parents!");
??}

}

用 csc /t:library Adam.cs 把 Adam.cs 編譯成 Adam.dll。接著,在記事本里寫下如下代碼:

//?Program.cs

class?Program
{
??
static?void?Main()
??
{
????Adam?adam?
=?new?Adam();
????adam.Hello();
??}

}

并用 csc /r:Adam.dl Program.cs 把 Program.cs 編譯成 Program.exe。運(yùn)行一下這個(gè)程序,得到如下輸出:

I have no parents!

當(dāng)然,此時(shí)的 Adam 還不是真正沒有 parent 的。現(xiàn)在,用 ILDASM 打開 Adam.dll,依次選擇 File -> Dump 菜單,點(diǎn)擊 OK,把 IL 代碼另存為 Adam.il。接著,用記事本打開 Adam.il,找到 Adam 的定義,把它后面的 extends [mscorlib]System.Object 注釋掉,保存、退出。然后,在命令行里輸入 ilasm /dll /noautoinherit adam.il,得到新的 Adam.dll。現(xiàn)在,再次運(yùn)行 Program.exe,雖然輸出和之前一樣,但當(dāng)你使用 ILDASM 查看 Adam.dll 里的 Adam 類時(shí),你發(fā)現(xiàn)它已經(jīng)變成“真正的亞當(dāng)”了!就連 Reflector 也說它沒有 Base Types 了,呵呵~~~

然而,我不禁自問,這樣一個(gè)類究竟有什么用呢?如果沒有用處,那么 Microsoft 又為何在 2.0 中引入 /noautoinherit 這樣一個(gè)參數(shù)呢?

轉(zhuǎn)載于:https://www.cnblogs.com/allenlooplee/archive/2007/01/22/627386.html

總結(jié)

以上是生活随笔為你收集整理的System.Object 是 .NET 中所有类型的根吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。