当前位置: 代码迷 >> C# >> instanceof跟is这两种操作到底有什么区别
  详细解决方案

instanceof跟is这两种操作到底有什么区别

热度:38   发布时间:2016-05-05 03:24:53.0
instanceof和is这两种操作到底有什么区别?
如题,谢谢。....
------解决思路----------------------
区别不多。如果要从表象来说,'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 非常轻便,甚至可能根本不生成运行时的代码。
  相关解决方案