• Object 与 Type


    解释性说明:

         Object 是所有类的基类,引用类型派生于Object。值类型虽然派生于valuetype(它本生派生于Object ,不过它们被定义了seal)。
    Type 在MSDN描述为表示类型声明。而Type多数被使用反射中,可以方便得到类内部成员信息。Gettype 与typeof分别用可以在动态获得运行的类型和静态得到实例的类型
    如下代码:
    int k=0;
    Type type = k.GetType();
    Type type1 = typeof(Int32);

          考虑上面k.GetType()。如果上面k是一个引用类型同样也可以,在Type类中有一个GetType()方法,所以类是隐性继承于Object,Object中GetType方法,Type类也一样,同样隐性继承于Object,这才是关键,Reflection Type类中GetType,会发现如下Type.GetType(),Type.GetType (String)Type.GetType (String, Boolean) ,Type.GetType (String, Boolean, Boolean) Type类重载了很多GetType方法,仅Type.GetType()是被override ,写到这里时我发现一个很有意思的地方,Framework2.0定义:public override sealed Type GetType (),描述:重载获取表示指定类型的 Type 对象在Framework3.5定义为:public Type GetType(),在使用Reflecation工具后发现Object类中被这样定义 protected extern object MemberwiseClone(); 它的实现交给了实现具体类的GetType()方法,不过它是隐藏的方法。如果直接public Type GetType()编译时会提示,用new去覆盖。

    考虑如下代码

    public class MyClass
        {
            public MyClass()
            { }

            public new Type GetType()
            {
                return typeof(System.Int32);
            }
       }

    public void Test()
       {  
            MyClass myclass = new MyClass();
            Type type4= myclass.GetType();
      }

    结果是返回Int32,将上面代码做一下调整。

    public void Test()
      {  
      Type Type5 = typeof(MyClass);
      }

    结果是MyClass。

         说明GetType与typeof实现上机制是不一样的,GetType是在运行时动态获取,而typeof是静态获取。GetType方法返回一个表对象运行时的Type,Object替代了这种实现。Object可以GetType出来,但是new Type是出不来Object的,因为public abstract class Type,不可被实例化,Type类只是所有成员的索引角色。Object可以指向一任意一个类型的任何给定的实例。Object更像一个"型"。Type才是一个类。

      以上的分析,就不难理解为什么平时只会在装箱或拆箱时见到最多的Object ,而Type更多时候在反射时用到,可有时在传递时仅需要一个Object时,可能会传递一个Type,然后再构造它。现在查看自己代码吧!了解Object与Type这对代码优化是有好处的。

  • 相关阅读:
    【跃迁之路】【461天】刻意练习系列220(2018.05.12)
    【跃迁之路】【461天】刻意练习系列220(2018.05.12)
    【跃迁之路】【461天】刻意练习系列220(2018.05.12)
    Ajax打开三种页面的请求
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/shouhongxiao/p/1810495.html
Copyright © 2020-2023  润新知