下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

用.net动态创建类的实例探究

作者:课课家     来源: http://www.kokojia.com/点击数:629发布时间: 2015-11-07 10:32:35

标签: 编程语言编程视频编程开发

大神带你学编程,欢迎选课
获得知识的途径有很多,现在由小编为大家讲解有关语言编程的文章希望对大家有所帮助

c语言编程入门用.net动态创建类的实例
看了网上很多关于DotNet动态创建类的实例的文章,我这里想总结一下,其实方法很简单,就是用“Activator.CreateInstance”。但是这个方法需要待创建的类的Type作为参数,为了获得该参数,可以利用[Assembly].GetType方法,这个方法只需要待创建的类的名称(名称字符串)就可以了,最后的问题就是要获得这个类所在的程序集。如何获得待创建的类所在程序集,那么就解决了这个问题。
其实,在获得程序集这个问题上,可以有更简单的办法,以下是我的做法。
利用Microsoft.VisualBasic.CodeProvider(),如果是C#可以用CSharpCodeProvider(),将类文件编译成为DLL文件,然后利用[Assembly].LoadFrom("DLL 的绝对路径")加载该DLL。这样我们可以避免在那些创建DLL和Type的复杂代码。我告诉我的项目组成员这个例子后,强调要打开思路,Simple is perfect,凡事都尽量找简便的方法来实现,客户永远不会为我们那些复杂的代码多花一分钱。
 
1.执行编译任务的方法:
Public Shared Function CompileExecutable()Function CompileExecutable(ByVal sourceName As String, ByVal DLLPath As String, ByRef ReturnDLLName As String) As Boolean
Dim sourceFile As FileInfo = New FileInfo(sourceName)
Dim provider As CodeDomProvider = Nothing
Dim compileOk As Boolean = False
C语言教程' 根据原文件的扩展名选择code provider
If sourceFile.Extension.ToUpper(CultureInfo.InvantCulture) = ".CS" Then
provider = New Microsoft.CSharp.CSharpCodeProvider()
ElseIf sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) = ".VB" Then
provider = New Microsoft.VisualBasic.VBCodeProvider()
Else
Console.WriteLine("原文件必须包含 .cs 或 .vb 扩展名")
End If
If Not provider Is Nothing Then

"我从事编程语言统计很多年了,有大量的数据来源包括代码存储库、Q&A讨论、招聘广告、社交媒体情况、教程页面访问、学习视频视图、开发者调查等等。数据发表在不同的时间,都可以被认为是精确的,
也可以被认为是有缺陷的,但是它们可以用于发现行业趋势。最后,不要期望一夜之间就变成一个编码忍者。有些人有一种天然的能力,但也是花了很多很多时间来磨练他们的技能,不断的学习新的技术和技巧。"

在过去三年中 XML 经历了许多反复,所以目前存在不同版本的 Microsoft XML 分析器也不奇怪。Internet Explorer 4.0 包含早期版本的 XML 分析器,它比 XSL、XML 数据或者大多数其他的 XML 技术(并且有完全不同的 DOM 模型)要早。该早期版本的分析器包含在 MSXML.dll 库中。从 MSDN XML 开发人员中心(英文)可将分析器升级到较新的一种。
  我们极力建议您升级到新的分析器,因为它要强大得多。Internet Explorer 5.0 包括 MSXML 2.0 分析器,它包含 XSL 和 XML 架构的基本版本。MSXML2 是 SQL Server 2000 附带的分析器版本。MSXML2 包含了许多性能增强的功能,并且在总体上提高了性能和可伸缩性。MSXML3 是当前作为“技术预览”附带的版本。MSXML3 包括 XSLT 和 XPath 支持以及 SAX 接口。

'c语言程序设计 构造DLL文件的全路径
Dim dllName As String = String.Format("{0}\\\\{1}.dll", _
DLLPath, _
sourceFile.Name.Replace(".", "_"))
ReturnDLLName = dllName
Dim cp As Compilarameters = New CompilerParameters()
' 设置编译控制参数
cp.GenerateExecutable = False '生成DLL,如果是True则生成exe文件
cp.OutputAssembly = dllName
cp.GenerateInMemory = False
cp.TreatWarningsAsErrors = False
' 调用编译方法将原代码文件编译成DLL
Dim cr As CompilerResults = provider.CompileAssemblyFromFile(cp, _
sourceName)
If cr.Errors.Count > 0 Then
' 显示编译错误
Console.WriteLine("编译错误 {0} 编译成 {1}", _
sourceName, cr.PathToAssembly)
Dim ce As CompilerError
For Each ce In cr.Errors
Console.WriteLine(" {0}", ce.ToString())
Console.WriteLine()
Next ce
Else
' 显示编译成功的消息
Console.WriteLine("原文件 {0} 编译成 {1} 成功完成.", _
sourceName, cr.PathToAssembly)
End If
' 返回编译结果
If cr.Errors.Count > 0 Then
compileOk = False
Else
compileOk = True
End If
End If
Return compileOk
End Function

2.编译DLL,并动态创建类的实例。(这里类的原文件是Class1.vb文件,放在WebSite的App_Code文件夹中了,实际使用时可以放在任意物理位置。)
Dim strSourceFileName As String = Server.MapPath("~/App_Code/Class1.vb") '类文件的全路径
Dim strDllPath As String = Server.MapPath("~/App_Code") '编译后的DLL文件存放的位置
Dim strDllName As String = "" 'DLL的全路径(返回值)
CompileExecutable(strSourceFileName, strDllPath, strDllName) '编译原文件为DLL文件
Dim a As [Assembly] = [Assembly].LoadFrom(strDllName) '加载DLL
Dim myType As System.Type = a.GetType("Class1") '获得Class1的Type
Dim obj As Object = Activator.CreateInstance(myType) '获得Class1的实例
3.Class1.vb原文件
Public Class Class1Class Class1
Public i As Integer
End Class

看完小编的文章是不是很精彩,更多关于在线教育的文章尽在课课家,希望你们多多关注。
赞(113)
踩(2)
分享到:
华为认证网络工程师 HCIE直播课视频教程