当前位置: 代码网 > it编程>编程语言>Asp.net > MSIL 静态类在 IL 定义上和非静态类的差别

MSIL 静态类在 IL 定义上和非静态类的差别

2024年05月12日 Asp.net 我要评论
本文来聊聊 MSIL 的基础知识,给一个 C# 的类标记了 static 之后和标记 static 之前,生成这个类的 IL 代码有什么不同 ...

本文来聊聊 msil 的基础知识,给一个 c# 的类标记了 static 之后和标记 static 之前,生成这个类的 il 代码有什么不同

如以下的代码是一个默认的控制台程序

    class program
    {
        static void main(string[] args)
        {
        }
    }

此时生成的 il 代码,大概如下

.class private auto ansi beforefieldinit kakawbaijairkacheberelere.program
        extends [system.runtime]system.object

而如果给 program 加上静态,如以下代码,生成的 il 代码是和之前不相同的

    static class program
    {
        static void main(string[] args)
        {
        }
    }

生成的 il 代码如下

.class private abstract sealed auto ansi beforefieldinit
  kakawbaijairkacheberelere.program
    extends [system.runtime]system.object

复习一下 il 代码的知识

在 msil 里,采用 .class 表示这是类型的定义,类型定义的格式大概如下

.class [访问权限] [其他修饰] [命名空间].[类名] extends [继承的基类]

可以看到上下两个 il 代码的不同在于,如果标记了 static 那 il 将加上 abstract sealed 修饰。和 c# 代码的含义相同,通过 abstract 表示此类型不能被实例化,通过 sealed 表示此类型不能被继承。因此这就构成了静态类的特点,不能被创建实例,也不能被继承

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com