所有代码都写好了。NET 语言编译成 MSIL,但是是否存在只能直接使用 MSIL 执行的特定任务/操作?
让我们用 MSIL 来做一些比 C # 、 VB.NET、 F # 、 j # 或其他任何.NET 语言更容易的事情吧。
到目前为止,我们有这个:
- 尾递归
- 通用协同/反差(C # 4和 VB 10允许)
- 只有返回类型不同的重载
- 重写访问修饰符
- 有一个不能从 System.Object 继承的类
- 过滤异常(在 VB 和 C # 6中允许)
- 调用当前静态类类型的虚方法。
- 获取值类型的装箱版本的句柄。
- 尝试/犯错。
- 禁用名称的使用。
- 为值类型 定义您自己的无参数构造函数。
- 使用
raise
元素定义事件。
- CLR 允许但 C # 不允许的一些转换。
- 制作一个非
main()
方法作为 .entrypoint
。
- 直接使用本地
int
和本地 unsigned int
类型。
- 使用瞬态指针
- MethodBodyItem 中的 emitbyte 指令
- 抛出和捕获非系统异常类型
- 继承枚举(未验证)
- 您可以将字节数组视为整型数组(比整型数组小4倍)。
- 可以有一个字段/方法/属性/事件都具有相同的名称(未经验证)。
- 您可以从它自己的 catch 块分支回 try 块。
- 您可以访问 famandassem 访问说明符(
protected internal
是 fam或者assem,但是现在在 C # 7.2和 VB 15.5中允许)
- 直接访问
<Module>
类以定义全局函数或模块初始值设定项。
- 创建和使用非零绑定的基于1的数组
- 创建开放实例和闭合静态委托,以及 getters/setter 的委托
- 不使用临时变量交换两个值
- 使用任意名称实现显式接口,并在一个接口中实现两个接口函数(可以在 VB 中实现)
- 声明
vtfixup
(相当于 C 中的 extern
)
- 指定任意
modopt
或 modreq