0

私は、すべて同じスーパークラスとインターフェイスを持つタイプの大きなブランチを取得しました。

スーパークラス: AbstractPackage インターフェース: IPackage

これで作った型。

パッケージ0....パッケージ723

UDP バイトストリームから受け取ったパターンに応じて、Activator.CreateInstance を使用してパッケージの新しいインスタンスを作成します。

New Dictionary(Of UInt32, Type) で、すべての登録済みパッケージを取得しました。

Uint32 はパッケージ番号 (0 ~ 723) であり、Type は Package0 ~ Package723 型のいずれかです。

問題は、Activator.CreateInstance が任意のタイプのクラスを作成することです。範囲を狭めることができるかどうか疑問に思っていました。

Dictionary(および Activator.CreateInstance) がパッケージのみを受け入れるようにしたかったのです。それはポーズ可能ですか?ありがとう

4

1 に答える 1

0

Hans Passant が私に指摘したように、少し変更を加えました。

これが私の新しいメソッドです(すべてのクラスを再度追加する必要がありますが、少なくともそれが生成するタイプを知っています。

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
于 2013-07-04T10:40:17.813 に答える