我遇到了Generic Class的问题,并定义了与它相关的运算符重载。 问题:
如果DataType将是任何数字类型{float,double,Integer等},我如何设置以下类的运算符?
我还没有理解这个概念
Public Class Nombre(Of DataType) '' aka Number
'VALUE
Private _Value As DataType
Public Property Value As DataType
Get
Return Me._Value
End Get
Set(value As DataType)
Me._Value = value
End Set
End Property
Public Sub New(value As DataType)
Me._Value = value
End Sub
Public Sub Add(x As DataType)
_Value += x
End Sub
Public Sub Subs(x As DataType)
_Value -= x
End Sub
Public Sub Mult(x As DataType)
_Value = _Value * x
End Sub
Public Sub Power(x As DataType)
_Value = _Value ^ x
End Sub
Public Sub inc()
_Value += 1
End Sub
Public Sub dec()
_Value -= 1
End Sub
Public Sub Divide(x As DataType)
_Value = _Value / x
End Sub
End Class
答案 0 :(得分:0)
假设DataType是任何数字类型{float,double,Integer等},我如何为下面的类设置运算符?
您无法以类型安全的方式执行此操作,因为您无法将DataType
限制为定义+
,-
等的类。这是is just not available yet。
您必须创建IntegerNombre
类,DoubleNombre
类等。然后您可以通常的方式定义运算符重载:
Public Shared Operator +(ByVal n1 As IntegerNombre,
ByVal n2 As IntegerNombre) As IntegerNombre
Return New IntegerNombre(n1._Value + n2._Value)
End Operator
(当然,您可以保留通用课程,转为Option Strict Off
并使用Object
后期绑定:
_Value = DirectCast(_Value, Object) + x
......但你真的不应该。)