2011-01-21

VB.NET中如何動態指定物件型別

在寫新版OMS發票軟體,其中有個目標功能是希望能加入多種發票機的支援。但是這樣一來,產生發票機物件的時候就會有個問題:要如何從設定檔內動態的指定物件的型別?
我把發票機的控制寫在一個class內,這個Class內用SerialPort實作發票機的控制與一些自訂的函數,然後由主程式產生這個物件來做列印。但日後有可能會需要支援多種發票機,假設有A和B兩種,我會想每種發票機個寫一個Class來控制,然後依照使用者的設定來選擇要產生發票機的型別(假設Class名稱是WPA與WPB),但如果照著底下寫法,會因為在IF這個區塊裡產生的,屬於區域變數,無法在IF外使用:
IF Config("PrinterModel") = "A" Then
   Dim Printer as New WPA("COM1")
Else
    Dim Printer as New WPB("COM1")
End If
Printer.Print("...") '這行一定無法執行
如果是寫在Form_Load的外面,也因為需要先指定物件的型別而只能寫死無法依照使用者的選擇來指定不同的型別。在藍色小舖上詢問過後,大致上可以有以下三種解決方式: