串口和互连网,根基语言编制程序

目       录

程序集

爱博体育app手机版 1
如何是程序集?

  • 1.程序集(assembly)是一个及多少个之上托管模块,以至部分能源文件的逻辑组合。
  • 2.程序集是组件复用,以致施行安全战略和版本战术的矮小单位。
  • 3.程序集是带有三个或然几个类型定义文件和能源文件的集合。在前后相继集带有的持有文件中,有三个文本用于保存项目清单。(清单是元数据部分中风姿洒脱组数据表的汇聚,个中蕴藏了前后相继集中一些文本的名称,描述了程序集的版本,语言文化,发表者,共有导出类型,以致重新组合该程序集的全部文件卡塔 尔(英语:State of Qatar)。
  • 4、在编译应用程序中,所开创的CIL代码存款和储蓄在三个顺序聚焦,程序集富含可实行的应用程序文件(.exe扩张名文件卡塔 尔(英语:State of Qatar)和其他应用程序使用的库(.dll增加名文件卡塔尔。
  • 简短的说在.NET生成的dll和exe都以程序集,然则c++生成的就不是了。次第集带有财富文件,类型元数据(描述在代码中定义的每风流倜傥品种和分子,二进制格局)、IL代码(那一个都棉被服装在exe或dll中),种种程序集都有友好的名目、版本等新闻。这个音信能够透过AssemblyInfo.cs文件来和谐定义。

爱博体育app手机版 2爱博体育app手机版 3

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// 有关程序集的常规信息通过以下
// 特性集控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("AssemblyDemo")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AssemblyDemo")]
[assembly: AssemblyCopyright("Copyright ©  2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// 将 ComVisible 设置为 false 使此程序集中的类型
// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
// 则将该类型上的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]

// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("e7da9959-0c97-444c-aa40-6d9bbf728068")]

// 程序集的版本信息由下面四个值组成:
//
//      主版本
//      次版本 
//      内部版本号
//      修订号
//
// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
// 方法是按如下所示使用“*”:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

AssemblyInfo.cs

View Code

 

爱博体育app手机版 4
次第集的长处:

  • 消除版本调控难点,程序只需求运用须求的程序集,缩短了编码量(比如log4net.dll卡塔尔,程序的尺码
  • 杀鸡取卵dll冲突(Windows历史上海大学名鼎鼎的 dll鬼世界卡塔尔国
  • 以在程序聚焦封装一些代码,提供必需的接口,供引用该程序集的连串选用

前后相继集常用的章程
Assembly.Load()方法,Assembly.LoadFrom()方法,Assembly.LoadFile()方法的区分!
1,Assembly.Load()
其大器晚成措施通进程序集的长名称(满含程序集名,版本音信,语言文化,公钥标识卡塔 尔(阿拉伯语:قطر‎来加载程序集的,会加载此程序集引用的别的程序集,日常景观下都应该事先使用
那几个法子,他的执行成效比LoadFrom要高超多,而且不会形成重复加载的主题材料(原因在第2点上证实卡塔尔
应用那么些办法的时候,
CL揽胜会应用一定的布置来查找程序集,实际上CL奥迪Q3按如下的逐条来定位程序集:
⑴假设程序集有强名称,在首先在全局程序集缓(GAC)中检索程序集。
⑵要是程序集的强名称未有科学钦赐或GAC中找不到,那么通过铺排文件中的成分内定的U奥迪Q7L来找出
⑶若无一点点名强名称也许在GAC中找不到,CLWrangler会探测特定的公文夹:
纵然你的应用程序目录是C:\AppDir,成分中的privatePath钦点了三个门路Path1,你要固定的次序集是AssemblyName.dll则CL福特Explorer将坚守如下顺序定位程序集

C:\AppDir\AssemblyName.dll 
C:\AppDir\AssemblyName\AssemblyName.dll 
C:\AppDir\Path1\AssemblyName.dll 
C:\AppDir\Path1\AssemblyName\AssemblyName.dll 

 

要是上述措施无法找到程序集,会发出编写翻译错误,要是是动态加载程序集,会在运维时抛出万分!
2,Assembly.LoadFrom()
以此办法从钦定的门路来加载程序集,实际上这几个主意被调用的时候,CLHaval会张开这些文件,获取当中的次第集版本,语言文化,公钥标志等新闻,把他们传递给
Load方法,接着,Load方法应用地点的政策来查找程序集。要是找到了程序集,会和LoadFrom方法中钦命的门径做相比,如若路线雷同,该程序集会被感到是应用程序的后生可畏有个别,要是路线分歧或Load方法未有找到程序集,那该程序集只是被看做三个“数据文件”来加载,不会被感觉是应用程序的风度翩翩部分。
那正是在第1点中提到的Load方法比LoadFrom方法的实行功效高的缘由。其余,由于可能把程序集作为“数据文件”来加载,所以采用LoadFrom从分裂路子加载相仿程序集的时候会变成重复加载。当然这些方法会加载此程序集援引的任何程序集。
3,Assembly.LoadFile()
那个措施是从钦点的文书来加载程序集,和地点方法的不一样之处是以此艺术不会加载此程序集援引的别样程序集!
敲定:平日大家应该事先筛选Load方法来加载程序集,若是遭遇要求运用LoadFrom方法的时候,最佳退换规划而用Load方法来顶替!
另:Assembly.LoadFile 与 Assembly.LoadFrom的区别
1、Assembly.LoadFile只载入相应的dll文件,比如Assembly.LoadFile(“abc.dll”),则载入abc.dll,即便abc.dll中引用了def.dll的话,def.dll并不会被载入。
Assembly.LoadFrom则不肖似,它会载入dll文件及其引用的别样dll,比如上边的例子,def.dll也会被载入。
2、用Assembly.LoadFrom载入多少个Assembly时,会先检查前边是或不是已经载入过同样名字的Assembly,比如abc.dll有多个本子(版本1在目录1下,版本2身处目录2下),程序后生可畏开端时载入了版本1,当使用Assembly.LoadFrom(“2\abc.dll”)载入版本2时,不可能载入,而是重回版本1。Assembly.LoadFile的话则不会做那样的自己争辩,比方上面的例子换来Assembly.LoadFile的话,则能准确载入版本2。
LoadFile:加载钦定路径上的顺序集文件的内容。LoadFrom:
依照程序集的文本名加载程序集文件的从头到尾的经过。
区别:
LoadFile
方法用来来加载和反省有着同等标记但位于差异门路中的程序集.但不会加载程序的依据项。
LoadFrom 不能够用来加载标志相仿但路线区别的程序集。
简单的讲:假如动态援引其他商家的dll,能够用LoadFrom,因为厂商的dll还以引用其余的dll,若是和谐写的小dll,未有依据项,则用LoadFile,可是如此比相当少用。最新版的只扶助LoadFrom了。

第天问           插件引擎设计… 2

反射

反射正是动态获取程序集中的元数据(提供程序集的类型新闻卡塔尔国的效用。也便是动态获取程序聚集的元数据来操作类型的。比方大家使用的vs中的智能提示,正是经过反射获取类的不二诀要、属性的。程序集带有模块,而模块包罗类型,类型又含有成员。
反射则提供了包装程序集、模块和品种的指标。
您能够利用反射动态地创立项指标实例,将品种绑定到现成对象,或从现成对象中拿到项目。
然后,能够调用类型的章程或访问其字段和品质。
代表项目注解:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以致开放或密闭构造的泛型类型。
爱博体育app手机版 5
能够通过以下三种方法赢得Type:
1.因而类获得Type: Type t=typeof(Person);
Assembly中对type的品种的收获
调用Assembly的GetExportedTypes方法可以获得Assembly中定义的保有的public类型。
调用Assembly的GetTypes()方法可以获取Assembly中定义的富有的项目。
调用Assembly的GetType(name)方法能够获得Assembly中定义的真名称叫name的类型信息。如:
Type type = assembly.GetType( ” MyAssembly.Person ” );
动态创制对像
Activator.CreateInstance(Type
t)会动态调用类的无参构造函数成立三个目的,再次来到值正是创办的对象,假设类没有无参构造函数就能够报错。
GetConstructor(参数列表);//那一个是找到带参数的构造函数。例如: object o =
Activator.CreateInstance(type, ” wolf ” , 22 , ” 未知 ” ); // 实例化
Type函数介绍
属性:
•type.Assembly:获取type所在的程序集对象
•type.FullName:获取type对象对应的类的全名称
•type.Name: 获取type对象对应类的 名称
•type.IsArray: 决断type是还是不是为叁个数组类
•type.IsEnum: 推断type是还是不是为八个枚举类
方法:
•type.IsAssignableFrom(Type i):判别type是还是不是贯彻了接口i
•type.IsSubclassOf(Type father):判别type是不是三番两回了father
•type.IsInstanceOfType(objecto):剖断o是不是为type类的实例
•type.GetFiled(“gender”):获取type中名字为gender的字段对象
•type.GetMethod(“SayHi”):获取type中名字为SayHi的情势对象
•type.GetProperty(“Age”):获取type中名称叫Age的性质对象

爱博体育app手机版 6爱博体育app手机版 7

//动态加载一个程序集
 Assembly assembly = Assembly.LoadFile(@"C:\02TestDll.dll");
//2.获取刚刚加载的程序集中的所有的类型
//assembly.GetType()  等价于  typeof(Assembly),不能获取某个程序集中国你的所有类型那个
//GetTypes()获取了所有的类型
 Type[] types = assembly.GetTypes();
////只获取那些public的类型
Type[] types = assembly.GetExportedTypes();
 //加入程序集中有多个类,只获取Person类的Type
//GetType()方法有重载,选择第二个重载,参数表示是要获取的类型的“完全限定名称”,即:命名空间.类名
//这里拿到了Type,其实就等价于typeof(Person)或者是:p.GetType();
 Type personType = assembly.GetType("_02TestDll.Person");
//获取所有的方法:personType.GetMethods();
////调用一个无参数,无返回值的方法
 MethodInfo method = personType.GetMethod("SayHi");            Console.WriteLine(method.Name);
//通过反射来创建一个Person类型的对象{其实就是通过Person的Type来创建一个Person对象}
object objPerson = Activator.CreateInstance(personType);
//调用这个方法
method.Invoke(objPerson, null);
//调用带参数,带返回值的方法
//1>找到对应的方法
 MethodInfo method = personType.GetMethod("Add");
object obj = Activator.CreateInstance(personType);
 //2>调用
 object result = method.Invoke(obj, new object[] { 102, 203 });
//调用重载的方法
 //1>找到对应的方法
MethodInfo method = personType.GetMethod("Add", new Type[] { typeof(int), typeof(int), typeof(int) });
 object obj = Activator.CreateInstance(personType);
//2>调用
int r = (int)method.Invoke(obj, new object[] { 1, 2, 3 });
 #region  通过反射获取类的属性,并赋值
//1.获取Name属性
PropertyInfo property = personType.GetProperty("Name");
object obj = Activator.CreateInstance(personType);
//2.为属性赋值
            property.SetValue(obj, "闫刘盘", null);
 //3.获取属性
 string name = property.GetValue(obj, null).ToString();
 #endregion

//#region 手动查找类型的构造函数,并且调用该构造函数来创建类型的对象
//查找到了对应的构造函数,但是还没有调用
ConstructorInfo ctor = personType.GetConstructor(new Type[] { typeof(string), typeof(int), typeof(string) });
//开始调用构造函数
object obj = ctor.Invoke(new object[] { "hpp", 16, "hpp@yahoo.com" });
bool IsAssignableFrom(Type c):(直译:是否可以从c赋值)判断当前的类型的变量是不是可以接受c类型变量的赋值。表示可以将Student类型赋值给Person类型,因为Student类型继承自Person类
bool IsInstanceOfType(object o):判断对象o是否是当前类的实例(当前类可以是o的类、父类、接口)
bool IsSubclassOf(Type c):判断当前类是否是类c的子类。只验证类与类之间的父子类关系,接口不包含。
IsAbstract   判断是否为抽象的,含接口

View Code

 

爱博体育app手机版 8

版权注明:本文为博主原创小说,未经博主允许不得转发。

9.1           框架的左券-接口… 2

9.2           插件的雏形-抽象类… 3

9.3           落成接口… 4

9.4           反射机制… 5

9.5           反射工具类… 8

9.6           小结… 9

 

第天问     插件引擎布署

在介绍《第10章
宿主程序详细安排》在此以前对接口和插件的连锁内容举行一下完全介绍,在规划宿主程序的时候会用到这几个文化,也是宿主程序与插件之间相互的宗旨内容。

9.1    框架的合同-接口

    
插件式框架的宿主程序运行后,它首先会加载相应的配备文件(比方:设备驱动配置文件等卡塔尔国,找到呼应的插件程序集,那么些程序集以DLL文件格式存在,框架的宿主程序会找到钦命的插件类型,由插件引擎依附插件类型(举个例子:IRunDevice卡塔尔生成对象实例,由框架的宿主程序的微处理器对插件实例实行田间处理和调节。

   
贰个插件程序集大概饱含七个插件类型,那么框架宿主程序是怎么鉴定识别那些品种是不是为要加载的插件呢?每一个插件对象皆有二个身价标志-接口,那个标记在框架设计中被称之为“通讯协议”。接口能够被作为是生龙活虎种概念了不能够缺乏的不二等秘书诀、属性和事件的集纳,因而宿主程序就足以透过这种合同来生成现实的实例对象,并对其他零零器件或接口公开可操作的对象。

   
插件式框架作为二个高聚合低耦合的平台,它的功力定义与效率完毕之间是抽离的。只要符合插件标准的一次开垦组件都能够挂载到框架平台南,而它并不并心那一个零器件的切实可行职能。当然,框架平台提供了部分必需的消息、机制来保管这么些构件能够健康完结一遍开辟的作用。

   
在颇负四个逻辑等级次序的结构划设想计中,各层之间的通信比超级多种经营过接口来促成,接口不会自由改变,借使一个层的职能发生变化,不会听得多了就能说的清楚别的层;只要正常达成了接口的构件功用,那么程序的运维就从不难题。这种做法使得各层之间的相互作用降到最低,同理可得,接口在多工作层级中可以知道更加好的解耦。

    在一大半功效性的编制程序和规划职业中,少之甚少需求考虑“接口(interface卡塔 尔(阿拉伯语:قطر‎”的景色,即便大家唯有满意通过控件的措施在IDE上编制程序和使用.NET
Framework中貌似的类库,可能恒久不会在程序中利用到接口,就算在C#等面向对象语言的语法书中读者会众数十次拜谒过这些词,也只是实现平时的机能,并未有理解面向对象编制程序的大旨境想。

    
接口是相近作为的概念和公约。如猫和狗等动物,只需求将普通的、公共性的习性、动作等概念在接口里,举例:有眼睛、能够吃东西等。即使分歧动物之间存在超级大差距,然则接口并不思谋它们分别的性状或效果与利益的差距,譬如:什么颜色的眼睛、吃什么样事物等。它只关切这几个连串都必需兑现接口定义的享有机能,而落到实处了那一个接口就能够被视作是生龙活虎种动物。

    由此,接口的四个主要的效力是:

n  定义多少个项目都亟需的国有措施、属性。

n  作为大器晚成种不可实例化的种类存在。

继续接口完结定义的法门、属性等,实际上是落到实处了后生可畏种政策。

9.2    插件的雏形-抽象类

接口与抽象类极度相同,比如两个都不能够new三个实例对象,却都足以作

为意气风发种公约和概念被接受。但是接口和抽象类有本质的例外,那几个差别包含:

n  接口没有其余达成部分,然而抽象类可以三翻五次接口后有个别实今世码。

n  接口未有字段,但是抽象类能够分包字段。

n  接口能够被协会(Struct卡塔 尔(阿拉伯语:قطر‎世襲,不过抽象类不行。

n  抽象类有构造函数和析构函数。

n  接口仅能三回九转自接口,而抽象类能够三番四回自别的类和接口。

n  接口帮助多延续,抽象类仅帮衬单根世袭。

在MSDN的连锁内容中,给出了之类关于接口与抽象类的建议:


即使预测要成立组件的多少个本子,则创设抽象类。抽象类提供轻巧易行的方式来决定组件版本。通过立异基类,全体世袭类都随改进自动更新。另一面,接口生龙活虎旦创设就无法改善,要是要更新接口的版本,必得创制贰个斩新的接口。


假设创立的效应就要大面积的全异对象间接选举择,则使用接口。抽象类应重视用以关系紧凑的对象,而接口最符合为不相干的类提供通用的功用。


假使要规划小而简约的功用模块,应该运用接口。借使要规划大的效应单元,则应该使用抽象类。


要是要在组件的具有达成间提供通用的已兑现效果与利益,应该运用抽象类。抽象类允许大器晚成部分完毕类,而接口不包括别的成员的兑现。

9.3    达成接口

接口和抽象类都能够作为“通讯左券”,为子类提供专门的职业。上边定义一个接口和抽象类。

//定义一个接口
public interface IMyInterface
{
       void Action(int type);
       string Method(int para);
}

//定义一个抽象类
public abstract class BaseAbstract:IMyInterface

{
       public abstract void Action(int type); //继承此类抽象类时必须实现这个方法。

       public string Method(int para)         //实现这个方法
       {
              return para.ToString();
       }
}

三番五次接口的话,要求得以实现任何概念的章程或性质,如下代码:

public class MyClass1:IMyInterface
{
       public void Action(int type)
       {
              Console.WriteLine(type.ToString());
       }

       public string Method(int para)        
       {
              return para.ToString();
       }
}

再而三抽象类的话,只需求落实抽象类未有兑现的点子或性质,日常为架空方法或性质,如下代码:

public class MyClass2:BaseAbstract
{
       public void Action(int type)   //继承抽象类,只需要实现这个函数。
       {
              Console.WriteLine(type.ToString());
       }
}

9.4    反射机制

爱博体育app手机版,   
有了器具驱动或插件,还不可能挂载到框架平台的宿主程序中。大家思索的主题材料是:已经有了随意三个品种插件程序集,框架平台如何从程序集中根据类型定义在内部存款和储蓄器中生成插件对象?

  
回看普通处境下程序引用其余程序集组件的历程。首先,须要选择“加多引用”对话框加载程序集。然后,通过using关键字援用命名空间。最后,在命令空间下找到相应的类,并new出来二个实例。那是生龙活虎种静态加载程序集的法子。

  
在插件式应用框架中,这种方法并不切合。宿主程序在编写翻译时并不知道它将在管理哪些程序集,更不曾章程静态的将插件类型通过using关键字引进,那个都是在运作时本领得到的新闻。在这里么的意况下,也无力回Smart用静态方法和new关键字来生成多个项目实例。而是须要在运作时收获有关音信动态加载程序集,那么些进程被可以称作反射。

  
反射是动态开掘类型消息的豆蔻梢头种工夫,它好像中期绑定,扶助开垦职员在程序运维时采取程序集新闻动态使用项目,那一个新闻在编写翻译时是百思不解的,反射还扶植越来越高档的行事,如能在运行时动态创制新品类,并调用那一个项目标章程等。

   
JIT编写翻译器在将IL代码编写翻译费用地代码时,会查看IL代码中引用了那多少个类型。在运维时,JIT编写翻译器利用程序集的TypeRef和AssemblyRef元数据表的笔录项来鲜明哪三个前后相继集定义了引用的体系。在
AssemblyRef元数据记录项中记录了前后相继集强名称的后生可畏风姿浪漫部分—满含名称,版本,公钥标志和言语文化。那七个部分组成了三个字符串标识。JIT编写翻译器尝试将与那几个标志相称的顺序集加载到近期的AppDomain中。假设程序集是弱命名的,标记少将只富含名称。

   .NET
Framework中,为了促成动态加载,要求熟识Assembly、Type和Activator等工具类的措施。框架平台重要运用了Assembly工具类,这么些类中总结Load、LoadFrom和LoadFile。

1.      Assembly的Load方法

  
在里边CL奥德赛使用Assembly的Load方法来加载那些程序集,这些主意与Win32的LoadLibray等价。在在这之中,Load引致CL库罗德对程序集应用一个本子重定向攻略。并在GAC中寻觅程序集,如果未有找到,就去应用程序的基目录,私有路线目录和codebase钦定的职责查找。纵然是二个弱命名程序集,Load不会向程序集应用重定向计谋,也不会去GAC中检索程序集。若是找到将赶回一个Assembly的援引,若无找到则抛出FileNotFoundException卓殊。注意:Load方法假设已经加载一个完全一样标记的次第集只会轻松的回来那么些程序集的援用,而不会去成立叁个新的程序集。

绝大超级多动态可扩张应用程序中,Assembly的Load方法是前后相继集加载到AppDomain的首推办法。这种方法需求钦赐程序集的标记字符串。对于弱命名程序集只用钦点二个名字。

2.Assembly的LoadFrom方法

   
当大家知晓程序集的门径的场子,能够选取LoadFrom方法,它同意传入一个Path字符串,在里面,LoadFrom首先调用AssemblyName的静态方法GetAssemblyName。那一个艺术张开钦定的公文,通过AssemblyRef元数据表提取程序集的标志,然后关门文件。随后,LoadFrom在里头调用Assembly的Load方法寻找程序集。到这里,他的一颦一笑和Load方法是同等的。唯一分歧的是,借使按Load的章程未有找到程序集,LoadFrom会加载Path路线钦命的顺序集。其它,Path可以是URubiconL。

3.Assembly的LoadFile方法

   
这么些措施初大器晚成看和LoadFrom方法很像。但LoadFile方法不会在内部调用Assembly的Load方法。它只会加载钦赐Path的程序集,並且这些办法能够从随机路径加载程序集,同意气风发程序集即使在分裂的门路下,它同意被频仍加载,等于多少个同名的程序集加载到了AppDomain中,那或多或少和方面包车型地铁八个主意完全不均等。不过,LoadFile并不会加载程序集的依赖项,也正是不会加载程序集引用的别的程序集,那会形成运维时找不到其他参照DLL的极度。要减轻那么些主题材料,要求向AppDomain的AssemblyResolve事件登记,在回调方法中体现加载援用的顺序集。相通于如此:

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
       if (args.Name != null)
       {
              return Assembly.LoadFrom(string.Format("{0}\\plugin\\{1}.dll", Application.StartupPath, new AssemblyName(args.Name).Name));
       }
       return null;
}

     
特别注意:要测量试验LoadFile有未有加载援引的DLL,切不可将DLL拷贝到应用程序的根目录下测量试验,因为该目录是CL奥迪Q7加载程序集的暗许目录,在此个目录中豆蔻梢头旦存在引用的DLL,它会被加载,产生LoadFile会加载引用DLL的假象。能够在根目录下新建二个子目录如plugin,把援引的dll拷贝到那之中进行测量试验。

    
反射机制也是有它的欠缺:安全性和属性方面。可是,框架平台在运转的时候、以至扩大新设备驱动(插件卡塔 尔(阿拉伯语:قطر‎的时候必要接受反射,风度翩翩旦加载到宿主程序中,与静态引用程序集并未有本质差距,都以存放在内部存款和储蓄器中。

9.5    反射工具类

插件式框架平台运用反射挂载设备驱动,在宿主程序中运作,须求三个专项使用的工具类来形成有关职能。代码定义如下:

/// <summary>
/// 一个轻便的 IObjectBuilder 实现
/// </summary>
public class TypeCreator : IObjectBuilder
{
       public T BuildUp<T>() where T : new()
       {
              return Activator.CreateInstance<T>();
       }

       public T BuildUp<T>(string typeName)
       {
              return (T)Activator.CreateInstance(Type.GetType(typeName));
       }

       public T BuildUp<T>(object[] args)
       {
              object result = Activator.CreateInstance(typeof(T),args);
              return (T)result;
       }

       /// <summary>
       /// 框架平台主要使用了这个函数。
       /// </summary>
       /// <typeparam name="T"></typeparam>
       /// <param name="assemblyname"></param>
       /// <param name="instancename"></param>
       /// <returns></returns>
       public T BuildUp<T>(string assemblyname, string instancename)
       {
              if (!System.IO.File.Exists(assemblyname))
              {
                     throw new FileNotFoundException(assemblyname + " 不存在");
              }
              System.Reflection.Assembly assmble = System.Reflection.Assembly.LoadFrom (assemblyname);
              object tmpobj = assmble.CreateInstance(instancename);
              return (T)tmpobj;
       }

       public T BuildUp<T>(string typeName, object[] args)
       {
              object result = Activator.CreateInstance(Type.GetType(typeName), args);
              return (T)result;
       }
}

9.6    小结

   
下后生可畏章节介绍宿主程序详细安排,要求对反射机制有肯定的问询,并且会动用到地点的工具类,并在那功底上实行扩展。

    框架平台将要全盘了,只须要一小步了。

 

小编:唯笑志在

Email:504547114@qq.com

QQ:504547114

.NET开荒本领联盟:54256083

文书档案下载:http://pan.baidu.com/s/1pJ7lZWf

官网:http://www.bmpj.net

相关文章