我一直在研究使用 ILSpy 的 .NET 程序集。我想知道“IS”(和“AS”)关键字在哪里定义,所以我可以看看它的定义,看看“IS”运算符是如何在.NET中定义的。谢谢
问问题
143 次
4 回答
8
它们在C# 的语言规范中定义并在编译器中实现,而不是特定的程序集。尽管使其在运行时工作所需的功能应该在mscorlib中,即 Just In Time 编译器。
如果您在 ECMA 上为 C# 4 标红(上面链接),您会is operator
在第 14.9.10 节和as operator
第 14.9.11 节中找到。
编译时 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 节中定义。
于 2013-07-05T10:42:16.017 回答
3
关键字是语言的一部分,而不是 API。
于 2013-07-05T10:41:53.363 回答
2
两者is
和as
都直接翻译成 CIL 指令Isinst
。并且 cast 运算符被翻译成Castclass
.
您可以从CLI 规范中了解更多关于这些指令的信息。
于 2013-07-05T10:48:15.647 回答
1
is
和as
是语言元素,如for
、while
、switch
等foreach
。它们没有在任何程序集中定义。
于 2013-07-05T10:43:02.537 回答