IS关键字C#——它属于哪个组件——它在哪里定义

本文关键字:组件 在哪里 定义 属于 关键字 IS | 更新日期: 2023-09-27 18:21:04

我一直在使用ILSpy研究.NET程序集。我想知道"is"(和"AS")关键字是在哪里定义的,这样我就可以看看它的定义,看看"is"运算符是如何在.NET中定义的。感谢

IS关键字C#——它属于哪个组件——它在哪里定义

它们在C#的语言规范中定义,并在编译器中实现,而不是特定的程序集。尽管使其在运行时工作所需的功能应该在mscorlib实时编译器中。

如果您在ECMA(上面链接)中红色显示C#4的标准,您将在第14.9.10节中找到is operator,在第14.9.11节中发现as operator

编译后,is运算符变为Isinst指令:

public bool IsDateTime(object o)
{
    return o is DateTime;
}

变为:

.method public hidebysig instance bool IsDateTime(object o) cil managed
{
  .maxstack  8
  ldarg.1
  isinst     [mscorlib]System.DateTime
  ldnull
  cgt.un
  ret
}

as operator也可以编译为Isinst指令:

public String AsString(object o)
{
    return o as String;
}

变为:

.method public hidebysig instance string AsString(object o) cil managed
{
    .maxstack  8
    ldarg.1     
    isinst     [mscorlib]System.String
    ret
}

这些指令在通用语言基础结构规范中有定义,Isinst在第III.4.6节中有定义。

关键字是语言的一部分,而不是API。

isas都直接转换为CIL指令Isinst。并将cast运算符转换为Castclass

您可以从CLI规范中了解更多有关这些说明的信息。

isas是语言元素,如forwhileswitchforeach等。它们未在任何程序集中定义。