一位同事今天问了我一个有趣的问题——C# 关键字/运算符“is”是否被认为是反射?
object tmp = "a string";
if(tmp is String)
{
}
这个操作符是如何在幕后实现的?它需要反思还是自省?或者由于语言的强类型特性,对象的类型是否可以作为内存中对象的顶级属性立即访问?
MSDN指出:
请注意,is 运算符仅考虑引用转换、装箱转换和拆箱转换。is 运算符不考虑其他转换,例如用户定义的转换。
考虑装箱和未装箱转换的能力对我来说似乎意味着某种内省。