类库探源——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类图如下:

类库探源——System.Type

上面的 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

 

你可能感兴趣的:(System)