|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
如果需要重新编写代码,几乎任何一门计算机语言都可以跨平台了,还用得着Java嘛,而且像PHP/C#等语言不需要修改代码都可以跨Windows/Linux。创立|静态|技能 看了网上良多关于DotNet静态创立类的实例的文章,我这里想总结一下,实在办法很复杂,就是用“Activator.CreateInstance”。可是这个办法必要待创立的类的Type作为参数,为了取得该参数,能够使用[Assembly].GetType办法,这个办法只必要待创立的类的称号(称号字符串)就能够了,最初的成绩就是要取得这个类地点的程序集。怎样取得待创立的类地点程序集,那末就办理了这个成绩。
人人能够参考http://www.ckuyun.com/ShadowK/archive/2006/11/14/560131.html,费了良多文字写了一个对照完全的静态机关类的计划器。实在,在取得程序集这个成绩上,能够有更复杂的举措,以下是我的做法。
使用Microsoft.VisualBasic.VBCodeProvider(),假如是C#能够用CSharpCodeProvider(),将类文件编译成为DLL文件,然后使用[Assembly].LoadFrom("DLL的相对路径")加载该DLL。如许我们能够制止在那些创立DLL和Type的庞大代码。我告知我的项目构成员这个例子后,夸大要翻开思绪,Simpleisperfect,凡事都只管找烦琐的办法来完成,客户永久不会为我们那些庞大的代码多花一分钱。
1.实行编译义务的办法:
PublicSharedFunctionCompileExecutable()FunctionCompileExecutable(ByValsourceNameAsString,ByValDLLPathAsString,ByRefReturnDLLNameAsString)AsBoolean
DimsourceFileAsFileInfo=NewFileInfo(sourceName)
DimproviderAsCodeDomProvider=Nothing
DimcompileOkAsBoolean=False
依据原文件的扩大名选择codeprovider
IfsourceFile.Extension.ToUpper(CultureInfo.InvariantCulture)=".CS"Then
provider=NewMicrosoft.CSharp.CSharpCodeProvider()
ElseIfsourceFile.Extension.ToUpper(CultureInfo.InvariantCulture)=".VB"Then
provider=NewMicrosoft.VisualBasic.VBCodeProvider()
Else
Console.WriteLine("原文件必需包括.cs或.vb扩大名")
EndIf
IfNotproviderIsNothingThen
机关DLL文件的全路径
DimdllNameAsString=String.Format("{0}{1}.dll",_
DLLPath,_
sourceFile.Name.Replace(".","_"))
ReturnDLLName=dllName
DimcpAsCompilerParameters=NewCompilerParameters()
设置编译把持参数
cp.GenerateExecutable=False天生DLL,假如是True则天生exe文件
cp.OutputAssembly=dllName
cp.GenerateInMemory=False
cp.TreatWarningsAsErrors=False
挪用编译办法将原代码文件编译成DLL
DimcrAsCompilerResults=provider.CompileAssemblyFromFile(cp,_
sourceName)
Ifcr.Errors.Count>0Then
显现编译毛病
Console.WriteLine("编译毛病{0}编译成{1}",_
sourceName,cr.PathToAssembly)
DimceAsCompilerError
ForEachceIncr.Errors
Console.WriteLine("{0}",ce.ToString())
Console.WriteLine()
Nextce
Else
显现编译乐成的动静
Console.WriteLine("原文件{0}编译成{1}乐成完成.",_
sourceName,cr.PathToAssembly)
EndIf
前往编译了局
Ifcr.Errors.Count>0Then
compileOk=False
Else
compileOk=True
EndIf
EndIf
ReturncompileOk
EndFunction
2.编译DLL,并静态创立类的实例。(这里类的原文件是Class1.vb文件,放在WebSite的App_Code文件夹中了,实践利用时能够放在恣意物理地位。)
DimstrSourceFileNameAsString=Server.MapPath("~/App_Code/Class1.vb")类文件的全路径
DimstrDllPathAsString=Server.MapPath("~/App_Code")编译后的DLL文件寄存的地位
DimstrDllNameAsString=""DLL的全路径(前往值)
CompileExecutable(strSourceFileName,strDllPath,strDllName)编译原文件为DLL文件
DimaAs[Assembly]=[Assembly].LoadFrom(strDllName)加载DLL
DimmyTypeAsSystem.Type=a.GetType("Class1")取得Class1的Type
DimobjAsObject=Activator.CreateInstance(myType)取得Class1的实例
3.Class1.vb原文件
PublicClassClass1ClassClass1
PubliciAsInteger
EndClass
数据库有很多应用领域,但是如果你单单学数据库的话基本上做数据库管理员比较合适而已,跟领域结合的你还得再学习那些领域知识。(其实数据挖掘我真是不懂,本来这学期开了一门课了。 |
|