首页 > 代码库 > c# 反射时GetType方法查找Type的分析
c# 反射时GetType方法查找Type的分析
反射是高级语言里面很强大的一种机制。C#也给我们提供了强大的反射机制。反射使用起来非常简单,最常见的步骤是:
1,定义一个Type 对象, Type myType;
2,通过字符串或者其它流初始化该对象,MyType = Type.GetType("MyClass");
在Type.GetType()方法执行时,系统怎么根据字符串查找正确的类的定义呢?看下面代码
[c-sharp] view plain copy
- using System;
- using System.Collections.Generic;
- using System.Reflection;
- using System.IO;
- namespace Test{
- public delegate Object TwoInt32s(Int32 n1, Int32 n2);
- public delegate Object OneString(String s1);
- class App
- {
- public static void Main(String[] args)
- {
- //Type delType = Type.GetType("TwoInt32s");//错误的调用方法
- Type delType = Type.GetType("Test.OneString");//正确的调用方法
- if (delType == null)
- {
- Console.WriteLine("Invalid delType argument: " + "TwoInt32s");
- return;
- }
- }
- }
- }
这段代码说明Type.GetType在解析类型的时候如果参数字符串没有指定namespace将会导致程序不能正确解析类型。
如果我们把namespace去掉,得到下面的代码
[c-sharp] view plain copy
- using System;
- using System.Collections.Generic;
- using System.Reflection;
- using System.IO;
- public delegate Object TwoInt32s(Int32 n1, Int32 n2);
- public delegate Object OneString(String s1);
- class App
- {
- public static void Main(String[] args)
- {
- Type delType;
- delType = Type.GetType("System.IO.File");//正确方法
- //delType = Type.GetType("File");//错误
- delType = Type.GetType("TwoInt32s");//正确的调用方法
- //Type delType = Type.GetType("Test.OneString");
- if (delType == null)
- {
- Console.WriteLine("Invalid delType argument: " + "TwoInt32s");
- return;
- }
- }
- }
这说明如果某类型被包含在namspace里面就必须要用包含namespace的完整路径来获取类型信息。
c# 反射时GetType方法查找Type的分析
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。