0

我有一大类类型,它们都有相同的超类和接口。

超类:AbstractPackage 接口:IPPackage

用这个制作的类型。

包0....包723

我使用 Activator.CreateInstance 创建包的新实例,具体取决于模式,从 UDP 字节流接收。

我在新字典(UInt32,类型)中获得了所有注册的包。

Uint32 是包号 (0-723),类型是 Package0 - Package723 类型中的任何一个。

问题是,Activator.CreateInstance 创建任何类型的类,我想知道是否可以缩小范围?

我想让字典(和 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 回答