标签:style blog http io ar color os sp strong
一、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 }
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 }
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 }
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 }
标签:style blog http io ar color os sp strong
原文地址:http://www.cnblogs.com/Aphasia/p/4153977.html