VB.NET中的运算符重载

时间:2016-09-15 20:33:25

标签: vb.net operator-overloading

我遇到了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

1 个答案:

答案 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

......但你真的不应该。)