' Visual Basic .NET Document Option Strict On ' Public Structure UDouble Private number As Double Public Sub New(value As Double) If value < 0 Then Throw New InvalidCastException("A negative value cannot be converted to a UDouble.") End If number = value End Sub Public Sub New(value As Single) If value < 0 Then Throw New InvalidCastException("A negative value cannot be converted to a UDouble.") End If number = value End Sub Public Shared ReadOnly MinValue As UDouble = CType(0.0, UDouble) Public Shared ReadOnly MaxValue As UDouble = Double.MaxValue Public Shared Widening Operator CType(value As UDouble) As Double Return value.number End Operator Public Shared Narrowing Operator CType(value As UDouble) As Single If value.number > CDbl(Single.MaxValue) Then Throw New InvalidCastException("A UDouble value is out of range of the Single type.") End If Return CSng(value.number) End Operator Public Shared Narrowing Operator CType(value As Double) As UDouble If value < 0 Then Throw New InvalidCastException("A negative value cannot be converted to a UDouble.") End If Return New UDouble(value) End Operator Public Shared Narrowing Operator CType(value As Single) As UDouble If value < 0 Then Throw New InvalidCastException("A negative value cannot be converted to a UDouble.") End If Return New UDouble(value) End Operator Public Shared Function ToDouble(value As UDouble) As Double Return CType(value, Double) End Function Public Shared Function ToSingle(value As UDouble) As Single Return CType(value, Single) End Function Public Shared Function FromDouble(value As Double) As UDouble Return New UDouble(value) End Function Public Shared Function FromSingle(value As Single) As UDouble Return New UDouble(value) End Function End Structure ' Module Example Public Sub Main() End Sub End Module