VB.Net通用限制

时间:2011-09-16 00:14:19

标签: vb.net generics

好的,我在设计基类来处理泛型时遇到了一些问题。警告我需要限制输入的类型为数值类型,特别是Int16,Int32或Int64(短或长)。

我知道你可以做Of T as {Structure}但我不想允许非整数作为类型。

任何建议?

2 个答案:

答案 0 :(得分:1)

我能想到的最好的方法是创建一个Friend泛型类,并构建从中继承的6个类。除了包含项目之外,Friend使成员成为私有成员。这样可以防止项目外的任何内容将其即时化为IntXClass(Of Double)

Friend Class IntXClass(Of T As Structure)
    ' TODO: Define all IntXClass members.
End Class

Public Class Int16Class
    Inherits IntXClass(Of Int16)
End Class

Public Class Int32Class
    Inherits IntXClass(Of Int32)
End Class

Public Class Int64Class
    Inherits IntXClass(Of Int64)
End Class

Public Class UInt16Class
    Inherits IntXClass(Of UInt16)
End Class

Public Class UInt32Class
    Inherits IntXClass(Of UInt32)
End Class

Public Class UInt64Class
    Inherits IntXClass(Of UInt64)
End Class

答案 1 :(得分:0)

.Net确实没有对数字类型的泛型有用的支持,有或没有约束。 This library可能有助于它的实现方面,但在定义约束方面你仍然不幸。

如果你真的急于限制它,你可以检查一个静态构造函数中的type参数,如果它是不可接受的则抛出它,这会导致TypeLoadException为那些试图错误地实例化的人。