zoukankan      html  css  js  c++  java
  • 类库探源——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
  • 相关阅读:
    C语言编程如何实现输出一个回型递增的N阶矩阵(螺旋矩阵)
    cookie测试要点
    一个网页怎么开展测试
    web和app区别
    app功能测试
    复习Linux笔记
    学习python
    微信小程序测试流程
    Redis
    记录
  • 原文地址:https://www.cnblogs.com/Aphasia/p/4153977.html
Copyright © 2011-2022 走看看