`
lovnet
  • 浏览: 6703731 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

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

阅读更多

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

Written by Allen Lee

这不是废话吗?每个人一接触 .NET 就会被提醒任何类型都是直接或者间接继承自 System.Object 的,即使 MSDN 也记录着类似的话。事实果真如此吗?如果你在命令行界面输入 ilasm /?,将会发现这样一个参数:

/NOAUTOINHERIT Disable inheriting from System.Object by default

现在,我尝试利用这个参数做一个没有基类的托管类型。首先,打开记事本,写下如下代码:

//Adam.cs

publicclassAdam
{
publicvoidHello()
{
System.Console.WriteLine(
"Ihavenoparents!");
}

}

用 csc /t:library Adam.cs 把 Adam.cs 编译成 Adam.dll。接着,在记事本里写下如下代码:

//Program.cs

classProgram
{
staticvoidMain()
{
Adamadam
=newAdam();
adam.Hello();
}

}

并用 csc /r:Adam.dl Program.cs 把 Program.cs 编译成 Program.exe。运行一下这个程序,得到如下输出:

I have no parents!

当然,此时的 Adam 还不是真正没有 parent 的。现在,用 ILDASM 打开 Adam.dll,依次选择 File -> Dump 菜单,点击 OK,把 IL 代码另存为 Adam.il。接着,用记事本打开 Adam.il,找到 Adam 的定义,把它后面的 extends [mscorlib]System.Object 注释掉,保存、退出。然后,在命令行里输入 ilasm /dll /noautoinherit adam.il,得到新的 Adam.dll。现在,再次运行 Program.exe,虽然输出和之前一样,但当你使用 ILDASM 查看 Adam.dll 里的 Adam 类时,你发现它已经变成“真正的亚当”了!就连 Reflector 也说它没有 Base Types 了,呵呵~~~

然而,我不禁自问,这样一个类究竟有什么用呢?如果没有用处,那么 Microsoft 又为何在 2.0 中引入 /noautoinherit 这样一个参数呢?

分享到:
评论

相关推荐

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf 第I部分 语言结构和环境 第1章 visual studio 2010 3 1.1 visual studio 2010:从express到ultimate的各种版本 4 1.2 visual basic的关键字和语法 7 ...

    autocad objectarx acmgd.dll 导出的.net类资料清单

    BeginInvoke(Object,DocumentLockModeWillChangeEventArgs,AsyncCallback,Object) AS System.IAsyncResult Clone() AS System.Object DynamicInvoke(Object[]) AS System.Object Equals(Object) AS System....

    C# WPf经典教程包含有14个文件

    • System.Object类:在.Net中所有类型的根类型 • System.Windows.Threading.DispatcherObject类:WPF 中的大多数对象是从 DispatcherObject 派生的,这提供了用于处理并发和线程的基本构造。WPF 基于调度程序实现...

    asp.net发送电子邮件例子

    using System.Net.Mail; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } //当一个用户进行注册的时候同时发送一个邮件到注册人的邮箱,...

    asp.net调用RAR实现文件压缩与解压缩图文代码

    如果服务器上安装了RAR程序,那么asp.net可以调用RAR实现文件压缩与解压缩。 不过要注意的是,由于Web程序不能直接调用客户端的程序(除非用ActiveX,ActiveX几乎被废弃),所以如果要想实现让用户把本地文件用网页...

    VB.NET 小游戏 打地鼠

    用VB.NET做的小游戏--打地鼠 Public Class Form1 Inherits System.Windows.Forms.Form Dim pic As New PictureBox Dim goal As Integer Dim i As Integer Dim j As Integer Dim xx1() As Integer = {135, 277...

    Wrox.Beginning.ArcGIS.for.Desktop.Development.using.NET

    Object-Oriented and Interface-based programming in .NET (C# and VB.NET) Finding relationship between classes and interfaces using object model diagrams Querying data Visualizing geographical data ...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    2.ASP.NET.2.0.高级编程(第4版) [1/7] 原书名: Professional ASP.NET 2.0 原出版社: Wrox 作者:(美)Bill Evjen, Scott Hanselman, Farhan Muhammad [同作者作品] [作译者介绍] 译者: 李敏波[同译者作品] ...

    asp.net中System.Timers.Timer的使用方法

    void Application_Start(object sender, EventArgs e) { // 在应用程序启动时运行的代码 System.Timers.Timer MT = new System.Timers.Timer();   MT.Enabled = true;   MT.Interval = 1000;  MT.Elapsed +

    vb.net跑表程序

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick msec += 1 If msec >= 100 Then msec = 0 sec += 1 ElseIf sec >= 60 Then sec = 0 min += 1 ...

    记事本 用b.net

    Private Sub AxWindowsMediaPlayer1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub Public Class Form1 Private Sub 文件ToolStripMenuItem_Click(ByVal sender As System.Object,...

    ULT-C智能卡芯片开发软件,可读取芯片信息(中英版)

    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> [base64 mime encoded string representing a byte array form of the .NET ...

    显示系统默认的关于对话框,C#源代码 [System.Runtime.InteropServices.DllImport

    显示系统默认的关于对话框,C#源代码 [System.Runtime.InteropServices.DllImport ("shell32.dll", EntryPoint = "ShellAbout")] private static extern int ShellAbout(int hWndn, string szApp, string ...

    vb.net基础程序

    Vb.net 编程语言汇总及重要笔记 建立textbox和button等 视图---工具箱---工具箱中寻找textbox和button等 点击变化button字体 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal ...

    Programming_Visual_Basic_NET.pdf

    3.2 Common Type System (CTS).....................................................................111 3.3 Portions of the CLI......................................................................

    C#与.NET3.5高级程序设计(第4版) 中文1

    6.7 超级父类:System.Object 168 6.8 小结 173 第7章 结构化异常处理 174 7.1 错误、bug与异常 174 7.2 NET异常处理的作用 174 7.3 最简单的例子 176 7.4 配置异常的状态 180 7.5 系统级异常(System...

Global site tag (gtag.js) - Google Analytics