一、MSDN 描述

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

命名空间: System

程序集:mscorlib.dll

继承关系:

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

二、获取 Type 的几种方式:

1. typeof 运算符

 var type1 = typeof(TypeName);

var intType = typeof(int);

2. Type.GetType(string TypeName) 方法

注意 TypeName 必须是 AssemblyQualifiedName ,即类型的程序限定名由程序的名称(包括了类型的命名空间)加上一个逗号再加上程序集的显示名称组成。

 var typeName = @"ImplA.ClassFunc,ImplA";
var typeImplA = Type.GetType(typeName);

3. ObjectInstance.GetType();

 Console.WriteLine(.GetType());

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

三、简单的类加载器

UML类图如下:

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

IFuction 位于 Common.dll

 namespace Common
{
public interface IFuction
{
void Init(string initConfig); void Open(); void Close(); void Dispose();
}
}

Loader 位于 App.exe

 using System;
class App
{
static void Main()
{
LoadPlugin();
} static void LoadPlugin()
{
// 读取xml配置,目前为了代码简单化写死
var strA = @"ImplA.ClassFunc,ImplA";
var strB = @"ImplB.ClassFunc,ImplB"; var instanceA = Activator.CreateInstance(Type.GetType(strA)) as IFuction;
var instanceB = Activator.CreateInstance(Type.GetType(strB)) as IFuction; instanceA.Init(null);
instanceA.Open(); instanceB.Init(null);
instanceB.Open();
}
}

ClassFunc 位于 ImplA.dll

 using System;
using Common; namespace ImplA
{
public class ClassFunc : IFuction
{ public void Init(string initConfig)
{
Console.WriteLine("ImplA.ClassFunc.Init");
} public void Open()
{
Console.WriteLine("ImplA.ClassFunc.Open");
} public void Close()
{
Console.WriteLine("ImplA.ClassFunc.Close");
} public void Dispose()
{
Console.WriteLine("ImplA.ClassFunc.Dispose");
}
}
}

ClassFunc 位于 ImplB.dll

 using System;
using Common; namespace ImplB
{
public class ClassFunc : IFuction
{ public void Init(string initConfig)
{
Console.WriteLine("ImplB.ClassFunc.Init");
} public void Open()
{
Console.WriteLine("ImplB.ClassFunc.Open");
} public void Close()
{
Console.WriteLine("ImplB.ClassFunc.Close");
} public void Dispose()
{
Console.WriteLine("ImplB.ClassFunc.Dispose");
}
}
}

最新文章

  1. elasticsearch,python包pyes进行的处理
  2. 【java】:常用工具类
  3. 这里有个坑---js日期格式yyyy-MM-dd与yyyy/MM/dd
  4. mongoDB 入门指南、示例
  5. jquery的延迟加载插件Lazy Load Plugin for jQuery
  6. margin的BUG(2)
  7. GitHub 有哪些优秀的项目
  8. VirtualDub - 开源视频捕捉及线性处理软件
  9. Java内部类的一些总结
  10. Java基础知识强化93:算一下你来到这个世界多少天的案例
  11. 2015西雅图微软总部MVP峰会
  12. List分组 用于客服对话分组场景
  13. JavaScript一个简易枚举类型实现扑克牌
  14. Windows下使用nginx搭建反向代理服务器
  15. SDOI2017 Round1
  16. (九)random、os、time、datetime、hashlib、pymysql、excel、sys、string相关模块
  17. el表达式与<c:foreach>标签的联合各种使用方法记录
  18. Pi的计算
  19. CF 313B
  20. 步步為營-95-MyMVC 1.0

热门文章

  1. 打开URL操作
  2. oracle全托管驱动Oracle.ManagedDataAccess
  3. HDOJ/HDU 1087 Super Jumping! Jumping! Jumping!(经典DP~)
  4. Red5 项目的流事件回调流程和注意事项
  5. bzoj 2618 2618: [Cqoi2006]凸多边形(半平面交)
  6. 解决windows10搜索不到内容的问题
  7. Linux开机自动挂载Windows分区
  8. UIView frame, bounds and center
  9. Dynamic Library Design Guidelines
  10. Spring各种注解标签作用详解