对于自己的第一的一个TestClass类
调用
Type type= Type.GetType("TestClass");
FieldInfo[] field =type.GetFields();
运行到第一句不报错
运行到第二句时就报错:说什么 对象没有一个设置一个实例TestClass y=new TestClass();
Type type=y.GetType();
FieldInfo[] field =type.GetFields();
没有报错
或者改成Type type=typeof(TestClass)
FieldInfo[] field =type.GetFields();
也不报错这里有什么区别?

解决方案 »

  1.   

    Type type=typeof(TestClass)
    FieldInfo[] field =type.GetFields();
    这句应该没有实例化TestClass吧
    为什么不报错?
      

  2.   

    Type.GetType("testClass") 
    这个时候还不是你的testClass
    而是
    获取表示指定类型的 Type 对象

    TestClass y=new TestClass();
    Type type=y.GetType();y是用的父类object.getType();
    Type 实例,表示当前实例的确切运行时类型。
    typeof
    若要获取表达式的运行时类型一个是对象 一个是类型 
      

  3.   

    typeof是C#中的关键字 在编译的时候
    会在IL中间码上做些处理
    比如
    Type type=typeof(Class1)
    FieldInfo[] field =type.GetFields();生成的中间码 会是这样
    IL_0000:  ldtoken    ConsoleApplication3.Class1
      IL_0005:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
      IL_000a:  stloc.0
      IL_000b:  ldloc.0
      IL_000c:  callvirt   instance class [mscorlib]System.Reflection.FieldInfo[] [mscorlib]System.Type::GetFields()
      IL_0011:  stloc.1
      IL_0012:  retIL_0000的ldtoken是什么意思呢?
    将元数据标记转换为其运行时表示形式,并将其推送到计算堆栈上。
      

  4.   

    至于你的第一个
    Type type= Type.GetType("TestClass");
    FieldInfo[] field =type.GetFields();
    为什么会报 错误
    是因为
    你没指定名称空间
    Type type= Type.GetType("System.Console");
    FieldInfo[] field =type.GetFields();
      

  5.   

    Type typeType.GetType("testClass") 
    这个时候还不是你的testClass
    而是
    获取表示指定类型的 Type 对象
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    这句话怎么理解?
    既然已经获得了指定类型的Type对象
    难道不能取该类型对象的成员么?
    或者只是说,Type type=Type.GetType("testClass")就像类的声明一样
    只是 只是声明了这样的一个指定类型的Type对象.未对其分配内容 所以
    FieldInfo[] field =type.GetFields();就去不到下面是msdn对typeof的说明:
    typeof(type)
    typeof 运算符用于获得某一类型的 System.Type对象
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    其中: 
    type 
    要获得其 System.Type 对象的类型。
    备注
    不能重载 typeof 运算符。
    若要获得一个表达式的运行时类型,可以使用 .NET Framework 方法 GetType。
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~一个是类型,一个对象 楼主搞错了?
      

  6.   

    至于你的第一个
    Type type= Type.GetType("TestClass");
    FieldInfo[] field =type.GetFields();
    为什么会报 错误
    是因为
    你没指定名称空间
    ~~~~~~~~~~~~~~~~~~他报的错是对象没有实例化
    Type type= Type.GetType("System.Console");
    FieldInfo[] field =type.GetFields();
      

  7.   

    它报的错误是:
    Unhandled Eeception:System.NUllReferenceException:Object reference not set to an in stance of an object.
         
      

  8.   

    显然Type.GetType("TestClass")返回了null;
    因为这里必须指定全名,比如Type.GetType("System.Int32"),像Type.GetType("string")是不行的.