动态创建对象

C#主要支持 5 种动态创建对象的方式:   1. Type.InvokeMember   2. ContructorInfo.Invoke   3. Activator.CreateInstance(Type)   4. Activator.CreateInstance(assemblyName, typeName)   5. Assembly.CreateInstance(typeName)  最快的是方式 3 ,与 Direct Create 的差异在一个数量级之内,约慢 7 倍的水平。其他方式,至少在 40 倍以上,最慢的是方式 4 ,要慢三个数量级。 尽量NEW ,少反射

Assembly.CreateInstance()创建实例与New的区别 区别一: new是调用的newobj方法来直接实例化对象在托管堆上分配内存的,编译时确定的,并且编译时进行了类型检查。 CreateInstance方法是通过调用程序集的元数据,根据元数据描述来创建对象的,类型不安全的,但是它可以动态创建对象。优势应该在于灵活吧。 区别二: Assembly.CreateInstance()是动态加载,即运行时创建类,编译时不验证类是否存在。 new是静态加载。编译时类已经被编译。

Assembly.Load("程序集名称").CreateInstance("命名空间.类") 见:http://www.tuicool.com/articles/bIjUzu

class Program{static void Main(string[] args){ILoveMM mm = (ILoveMM)Assembly.Load("Reflection").CreateInstance("Reflection.LoveMM");//这块直接强制类型转换就行
      mm.Output();    }}interface ILoveMM{void Output();}class LoveMM : ILoveMM{public void Output(){Console.WriteLine("I love you MM");}}

 

关于反射中Assembly.CreateInstance()与Activator.CreateInstance()方法的区别  msdn,查到了两个方法的介绍: Assembly.CreateInstance 方法 (String) 使用区分大小写的搜索,从此程序集中查找指定的类型,然后使用系统激活器创建它的实例。 Activator.CreateInstance 方法 (Type) 使用与指定参数匹配程度最高的构造函数来创建指定类型的实例。

//从程序集创建对象实例 string path = System.Configuration.ConfigurationSettings.AppSettings["DAL"];//数据层的程序集名称 return (IDbObject)Assembly.Load(path).CreateInstance(path+".DbObject");

如果你的数据层不是单独的程序集,可以采用如下方法加载

//从程序集创建对象实例
string path = System.Configuration.ConfigurationSettings.AppSettings["DAL"];//数据层的程序集名称
return (IDbObject)Assembly.Load(path).CreateInstance(path+".DbObject");

如果你的数据层不是单独的程序集,可以采用如下方法加载:

//使用与指定参数匹配程度最高的构造函数来创建指定类型的实例
string path = System.Configuration.ConfigurationSettings.AppSettings["DAL"];
string TypeName=path+".DbObject"
Type objType = Type.GetType(TypeName,true);
return (IDbObject)Activator.CreateInstance(objType);

 

见:http://blog.163.com/jiang_tao_2010/blog/static/1211268902009817324945/

自己的代码:  //Assembly assembly = Assembly.Load(webSiteShopCode);                 //var objGrab = (IGrab)assembly.CreateInstance(webSiteShopCode + ".Grab");

                Type objType = Type.GetType(webSiteShopCode + ".Grab", true);                 var objGrab = (IGrab)Activator.CreateInstance(objType); ;                 var product = objGrab.GetProInfo(createdTime, webSiteShopCode, i, url);

 

转载于:https://www.cnblogs.com/ChineseMoonGod/p/5190983.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python公式如何编写_如何编写 Python 程序,资深Python大咖教你玩转Python

如何编写Python程序,这从来就不是一件很难的事。下面我教你保存和运行 Python 程序的标准步骤,如下:对于 PyCharm 用户1. 打开 PyCharm。2. 以给定的文件名创建新文件。3. 输入案例中给出的代码。4. 右键并运行当前文件。注意:每当…

c语言学籍管理系统小程序,学籍业务办理系统(开源 v2.0发布 优化代码,增加小程序端)...

更新说明:1、此2.0版,大幅度优化代码,增加小程序端方便使用2、v1.0测试地址已关,请勿测试学生在校期间避免不了要和各种证明打交道,比如学籍证明、转专业申请、休学申请、退学申请等等。此类业务一般流程都是学生去找老…

Android 下的EXIF

一.什么是Exif Exif(Exchangeable Image File 可交换图像文件)是一种图象文件格式,它的数据存储与JPEG格式是完全相同的。实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍 摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件…

hill密码源代码c语言,古典密码(Hill加密算法)(示例代码)

“Hill的加密与解密”Hill加密是另一种多字母代替密码,与多表代替密码不同的是,Hill密码要求将明文分成同等规模的若干个分组(最后一个分组涉及到填充),每一个分组被整体的加密代换,即希尔密码属于分组加密。Hill密码的算法思想是…

python背景怎么自定义铃声_Python 上课铃声的定时播放(具有较强的自我管理能力.jpg)...

为了在家安心学习,我决定写一段代码播放上课的铃声。之前中学时就希望有一个这样的软件,周末就可以高效学习了。但是网上搜不到相关软件,当时也不会写代码,就用闹钟来代替了。现在自己写一个试试。原本我是用C写的,但后…

那些地方会用C语言多线程,如何用C语言实现多线程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Windows操作系统,C语言实现多线程:#include #include DWORD APIENTRY ThreadOne ( LPVOID threadArg ){printf ( "线程开始啦,参数是:%s\n" , (char *)threadArg );return …

AWK高级编程 转载

AWK高级编程 转载 转载自:http://blog.csdn.net/wzhwho/article/details/5513791 1. 程序元素 一个awk 程序是一对以模式(pattern) 与大括号框起来的操作(action) 组合而成的,或许,还会加上实现操作细节的函数(function ) 。针对每个匹配于输…

tensor判断是否相等_PyTorch的Tensor(中)

背景在PyTorch的Tensor系列上一篇文章中:Gemfield:PyTorch的Tensor(上)​zhuanlan.zhihu.comGemfield介绍了一个Tensor的创建过程,特别是在创建一个Tensor的时候,调用栈从Python到C再回到Python的过程。与此…

c语言字符串未初始化strcat,C语言中字符串常用函数strcat与strcpy的用法介绍

strcpy原型声明:extern char *strcpy(char* dest, const char *src);头文件:#include 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容…

charles抓包工具使用指南

前言移动APP抓包PC端抓包查看模式其他功能问题汇总1、 前言: Charles是一款抓包修改工具,相比起burp,charles具有界面简单直观,易于上手,数据请求控制容易,修改简单,抓取数据的开始暂停方便等等…

android电视打印信息解析,关于液晶电视打印信息

原来是波特率的原因。。换了个波特率显示正常了,下面这个是红灯亮不开机的酷开k2打印信息,有老师能解释一下怎么看吗JHello world!{m3a} svn-r(Apr 2 2015 19:53:30)init_hwsetting_cpre_hwsetting_cpost_hwsetting_cparse hw setting DONE!internal ro…

bzoj1269 文本编辑器 splay

直接搞棵splay就行了,不要把光标弄到树中而是把光标当成询问或操作区间的端点标志这样会简单很多。 7点40分写到9点20分,包括调试总共花了一个小时40分钟,这次是自己独立调出来的,总算对splay有一定的了解。 设计操作:…

sap bom递归_SAP软件之化工行业特点01

作者:阿long声明:本文章仅用于SAP软件的应用、学习沟通,不代表SAP公司;文中所示截图来源SAP软件,相应著作权归SAP所有。SPA中关于制造的几种介绍2020.06.29简单的说,制造业中,生产管理是企业的组…

android 对话框 图片,android – AlertDialog按钮的图像

由于不推荐使用onPrepareDialog,因此您可以使用onShowListener.你也应该设置Drawable边界,或者它将被放置在最左边.下面的代码输出public class MyDialog extends DialogFragment {Overridepublic Dialog onCreateDialog(Bundle savedInstanceState) {final AlertDialog dialog…

并发事务正确性的准则 可串行化_从0到1理解数据库事务(上):并发问题与隔离级别...

最近准备写一篇关于Spanner事务的分享,所以先分享一些基础知识,涉及ACID、隔离级别、MVCC、锁,由于太长,只好拆分成上下两篇:上:并发问题与隔离级别主要讲事务所要解决的问题、思路,先理解为什么…

Windows 8.1 Windows Phone 开发环境安装遇到的问题

以前使用 Windows 8 开装 WP 8 的开发环境,很是顺利。 将系统升级到 Windows 8.1 后,先是安装了 Windows 8.1 旗舰本,安装后发现没有 Hyper-V 功能。 换成企业版,确定有 Hyper-V 功能后,安装 VS2010 WP8 SDK 后&#x…

android eclipse services,Eclipse中调试Android Framework本地代码模块部分过程记录

环境:Amlogic S905M2 ubunt12.04 win7 adt_bundle_linux Android SDK过程:1.为避免用Eclipse基础版本(Luna)后需要安装包括adt、cdt等插件麻烦,直接解压adt_bundle_linux安装IDE环境2.调试准备:目标设备(Amlogic S905M2)中需要…

python数独代码_python 实现计算数独

输入文件格式:008309100900060004007504800036000540001000600042000970005907300600010008004608200输出结果:yuan********************0 0 8 3 0 9 1 0 09 0 0 0 6 0 0 0 40 0 7 5 0 4 8 0 00 3 6 0 0 0 5 4 00 0 1 0 0 0 6 0 00 4 2 0 0 0 9 7 00 0 5…

MyEclipse配色字体等配置的解决方案

Myeclipse黑色配色方案(精心修改版) http://download.csdn.net/detail/rehongchen/6579945 如何改变Myeclipse编辑区背景色 http://my.oschina.net/epiclight/blog/465506 -------------------------------------------------------------------------…

android studio内置终端,Android Studio Terminal xx不是内部或者外部命令

背景在使用AS工具自带命令面板Terminal的时候,相信你有碰到过:xx不是内部或者外部命令,也不是可运行程序。解决办法就是配置环境变量一、在 Terminal 中使用 adb,报 adb 不是内部或者外部命令,也不是可运行的程序。解决…