类库探源——System.Type

一、MSDN 描述

Type 类:表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义、以及开放或封闭构造的泛型类型。

命名空间: System

程序集:mscorlib.dll

继承关系:

 

从上面的继承关系能看出,Type和反射有关系,的确,引用MSDN上的话Type 为 System.Relection 功能的根也是访问元数组的主要方式。

 

二、获取 Type 的几种方式:

1. typeof 运算符

1 var type1 = typeof(TypeName);
2 var intType = typeof(int);

2. Type.GetType(string TypeName) 方法

注意 TypeName 必须是 AssemblyQualifiedName ,即类型的程序限定名由程序的名称(包括了类型的命名空间)加上一个逗号再加上程序集的显示名称组成。
 
1 var typeName = @"ImplA.ClassFunc,ImplA";
2 var typeImplA = Type.GetType(typeName);

3. ObjectInstance.GetType();

1 Console.WriteLine(3.GetType());

上面3种方法,最常用的是第二种,其次是第一种,然后是第三种

 

三、简单的类加载器

UML类图如下:

上面的 4个类(接口)分别在单独的程序集中

 

IFuction 位于 Common.dll

 1 namespace Common
 2 {
 3     public interface IFuction
 4     {              
 5         void Init(string initConfig);
 6 
 7         void Open();
 8 
 9         void Close();
10 
11         void Dispose();
12     }
13 }
View Code

Loader 位于 App.exe 

 1 using System;
 2 class App
 3 {    
 4     static void Main()
 5     {
 6         LoadPlugin();
 7     }
 8     
 9     static void LoadPlugin()
10     {
11         // 读取xml配置,目前为了代码简单化写死
12         var strA = @"ImplA.ClassFunc,ImplA";
13         var strB = @"ImplB.ClassFunc,ImplB";
14         
15         var instanceA = Activator.CreateInstance(Type.GetType(strA)) as IFuction;
16         var instanceB = Activator.CreateInstance(Type.GetType(strB)) as IFuction;
17         
18         instanceA.Init(null);
19         instanceA.Open();
20         
21         instanceB.Init(null);
22         instanceB.Open();
23     }
24 }
View Code

ClassFunc 位于 ImplA.dll

 1 using System;
 2 using Common;
 3 
 4 namespace ImplA
 5 {
 6     public class ClassFunc : IFuction
 7     {
 8 
 9         public void Init(string initConfig)
10         {
11             Console.WriteLine("ImplA.ClassFunc.Init");
12         }
13 
14         public void Open()
15         {
16             Console.WriteLine("ImplA.ClassFunc.Open");
17         }
18 
19         public void Close()
20         {
21             Console.WriteLine("ImplA.ClassFunc.Close");
22         }
23 
24         public void Dispose()
25         {
26             Console.WriteLine("ImplA.ClassFunc.Dispose");
27         }
28     }
29 }
View Code

ClassFunc 位于 ImplB.dll

 1 using System;
 2 using Common;
 3 
 4 namespace ImplB
 5 {
 6     public class ClassFunc : IFuction
 7     {
 8 
 9         public void Init(string initConfig)
10         {
11             Console.WriteLine("ImplB.ClassFunc.Init");
12         }
13 
14         public void Open()
15         {
16             Console.WriteLine("ImplB.ClassFunc.Open");
17         }
18 
19         public void Close()
20         {
21             Console.WriteLine("ImplB.ClassFunc.Close");
22         }
23 
24         public void Dispose()
25         {
26             Console.WriteLine("ImplB.ClassFunc.Dispose");
27         }
28     }
29 }
View Code

 

posted on 2014-12-09 19:25  ~江慕白~  阅读(258)  评论(0编辑  收藏  举报

导航