IS关键字C#——它属于哪个组件——它在哪里定义
本文关键字:组件 在哪里 定义 属于 关键字 IS | 更新日期: 2023-09-27 18:21:04
我一直在使用ILSpy研究.NET程序集。我想知道"is"(和"AS")关键字是在哪里定义的,这样我就可以看看它的定义,看看"is"运算符是如何在.NET中定义的。感谢
它们在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。
is
和as
都直接转换为CIL指令Isinst
。并将cast运算符转换为Castclass
。
您可以从CLI规范中了解更多有关这些说明的信息。
is
和as
是语言元素,如for
、while
、switch
、foreach
等。它们未在任何程序集中定义。