好的,我在设计基类来处理泛型时遇到了一些问题。警告我需要限制输入的类型为数值类型,特别是Int16,Int32或Int64(短或长)。
我知道你可以做Of T as {Structure}
但我不想允许非整数作为类型。
任何建议?
答案 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
为那些试图错误地实例化的人。