2013-07-02 35 views
0

我有一個類型的大分支,都獲得了相同的超類和接口。我可以使用狹窄的類型我想實例化與Activator.CreateInstance

父類:AbstractPackage 接口:IPackage

與本作的類型。

Package0 .... Package723

我使用Activator.CreateInstance創建包的一個新實例,根據OG的格局,從UDP字節流收到。

我得到了所有的註冊包,在一個新的詞典(的UInt32,類型)。

Uint32是包號(0-723),Type是Package0-Package723類型中的任何一個。

問題是,Activator.CreateInstance創建任何類型的類,我想知道是否可以縮小範圍?

我想使字典(和Activator.CreateInstance)只接受包。 是那個posable? 謝謝

+1

不管問題,你正在試圖解決,很不清楚,有724種用這樣的名字不能是正確的解決方案:)如果你需要一個「包號」來區分消息的類型,那麼就把它作爲一個字段添加到消息中。 –

+0

我開始使用1個gineric軟件包,但問題是,每個軟件包可能包含不同類型的數據,並且每個軟件包都被設計爲包含該數據。 例如,包裝500,containts 小端序INT 小端序INT 小端序INT 小端序INT 小端32字節的字符串 和封裝232包含 小端序INT 小端序INT 小端序INT 小尾數INT 小尾數8字節字符串 小尾數8字節字符串 大尾數布爾 大尾數布爾 大尾數布爾 大尾數布爾 大型連接dian bool 大端bool 大端bool null null – Droa

回答

0

隨着Hans Passant爲我指出,我做了一個細微的改變,我可能已經超越了它。

這裏是我的新方法(我還需要再次添加所有的類,但現在我ATLEAST知道它產生什麼類型的。

Public Function getPackage(ByVal bytes() As Byte) As APackage 
     Dim pkgbytes As Byte() = New Byte(3) {} 
     Dim o As Integer = 0 
     For i As Integer = 8 To 11 
      pkgbytes(o) = bytes(i) 
      o += 1 
     Next 

     Dim package As APackage 

     Dim iT As UInt32 = UByteChunk.getUInt32(pkgbytes) 
     Select Case iT 
      Case 0 
       '0 Acknowledge 
       package = New Package0(bytes) 
      Case 152 
       '152 EventCall 
       package = New Package152(bytes) 
      Case 157, 162, 165, 166 
       ' 157 Event Extension 
       ' 162 Event Delta Call 
       ' 165 
       ' 166 Event Call Logging 
       package = New PackageCall(bytes) 
      Case 174 
       '174 Event Targeting 
       package = New Package174(bytes) 
      Case 187, 188 
       '187 SIP Rx 
       '188 SIP Tx 
       package = New PackageSIP(bytes) 
      Case 93, 501, 502, 626 
       '93 Version 
       '501 Info 
       '502 Info 2 
       '626 License 
       package = New PackageText(bytes) 
      Case 563 
       '563 System Endpoint 
       package = New Package563(bytes) 
      Case Else 
       package = New PackageDefault(bytes) 
     End Select 

     Return package 
    End Function 
相關問題