VB.NET中的运算符重载

3

我有一个关于通用类和相关运算符重载定义的问题。

问题是:

如果假设 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个回答

4
假设DataType是任何数值类型(如float、double、Integer等),如何设置以下类的运算符?
您无法以类型安全的方式完成此操作,因为您无法将DataType限制为定义了+、-等的类。这是一个常见的请求功能,但尚不可用
您将不得不创建一个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

...但你真的不应该这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接