我一直在研究使用ILSpy的.NET程序集.我想知道定义"IS"(和"AS")关键字的位置,以便我可以看看它的定义,看看在.NET中如何定义"IS"运算符.谢谢
它们在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节中定义.
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |