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

Ant*_*Tun 1 .net c#

我一直在研究使用ILSpy的.NET程序集.我想知道定义"IS"(和"AS")关键字的位置,以便我可以看看它的定义,看看在.NET中如何定义"IS"运算符.谢谢

The*_*aot 8

它们在C#的语言规范中定义,并在编译器中实现,没有特定的程序集.虽然使其在运行时工作所需的功能应该是mscorlib即时编译器.

如果您在ECMA(上面链接)is operator中标记C#4的标准,您将在第14.9.10节和as operator第14.9.11节中找到.

编译时,is运算符成为Isinst指令:

public bool IsDateTime(object o)
{
    return o is DateTime;
}
Run Code Online (Sandbox Code Playgroud)

变为:

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

该as operator也可以编译成Isinst指令:

public String AsString(object o)
{
    return o as String;
}
Run Code Online (Sandbox Code Playgroud)

变为:

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

这些指令在Common Language Infraestructure规范中定义,Isinst在III.4.6节中定义.