如题,谢谢。....
------解决思路----------------------
区别不多。如果要从表象来说,'is'是关键词,IsInstanceOf是Type类的成员函数,两个的作用是一样的。
对我来说,最大的区别在于使用’is‘关键词需要设计时知道Type,而Type.IsInstanceOf可以使用一个运行时的Type变量。
比如:
bool CheckType(Type t, object o)
{
// 这里不能用 return o is ???; 因为写代码的时候(设计期),你不知道t是什么
return t.IsInstanceOfType(o);
}
bool CheckType<T>(object o)
{
return o is T;
return typeof(T).IsInstanceOfType(o); // 这里两个都可以用
}
另,如果你要比较Java的‘instanceof’和C#的’is'操作符,那么两个的作用是一样的。
------解决思路----------------------
可以看看.net 实现源代码
public virtual bool IsInstanceOfType(object o)
{
if (o == null)
{
return false;
}
return this.IsAssignableFrom(o.GetType());
}
可见它是使用 IsAssignableFrom 的一种封装。它允许你将类型作为“参数”来提供调用。
而且,它是 virtual 的,可以在子类中重写。例如 TypeInfo类型、DelayLoadType类型等等中就是Type的子类,你也可以自定义Type的子类用于自己的分析工作。
------解决思路----------------------
它允许你将类型作为“参数”来提供调用 --> 它允许你将目标对象作为“参数”来提供调用,自动找到动态指定的Type参数
------解决思路----------------------
而 is,实际上是编译的特性,在编译时就计算清楚结果了,不是运行时的特性。因此 is 非常轻便,甚至可能根本不生成运行时的代码。