国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.NET教程之--.NET動態創建類的實例解析_.Net教程

2024-07-10 12:51:29
字體:
來源:轉載
供稿:網友

推薦:解析.Net編程接口剖析系列之比較和排序
我們知道,與C 相比較,C#以及整個.Net并不支持多繼承,而相應的,C#支持了接口,并且支持一個類型實現多個接口。對于接口的概念,相信大部分讀者已經有了很好的了解,而我這里談談個人對

      看了網上很多關于DotNet動態創建類的實例的文章,我這里想總結一下,其實方法很簡單,就是用“Activator.CreateInstance”。但是這個方法需要待創建的類的Type作為參數,為了獲得該參數,可以利用[Assembly].GetType方法,這個方法只需要待創建的類的名稱(名稱字符串)就可以了,最后的問題就是要獲得這個類所在的程序集。如何獲得待創建的類所在程序集,那么就解決了這個問題。

      利用Microsoft.VisualBasic.VBCodeProvider(),如果是C#可以用CSharpCodeProvider(),將類文件編譯成為DLL文件,然后利用[Assembly].LoadFrom("DLL 的絕對路徑")加載該DLL。這樣我們可以避免在那些創建DLL和Type的復雜代碼。我告訴我的項目組成員這個例子后,強調要打開思路,Simple is perfect,凡事都盡量找簡便的方法來實現,客戶永遠不會為我們那些復雜的代碼多花一分錢。

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

分享:揭秘.net基礎知識錯誤注意二十二點知識
1:command調用存儲過程的時候,如果輸出是dataset,selectcommand的command對象的connection先要指出,否則catch一輩子也是空的.. 2:存儲過程的varchar字段如果是x.x的這種格式,容易出現細

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博湖县| 陇川县| 广南县| 都昌县| 中山市| 化州市| 上饶县| 固始县| 衡阳县| 神池县| 桓台县| 清镇市| 榆社县| 阳泉市| 大石桥市| 乐平市| 伊宁市| 安岳县| 衡东县| 历史| 宝兴县| 盐山县| 兴山县| 犍为县| 右玉县| 永新县| 东城区| 鹤岗市| 临朐县| 荣昌县| 高陵县| 莲花县| 大名县| 大荔县| 玉溪市| 肥东县| 含山县| 南开区| 南平市| 曲麻莱县| 聂荣县|