覆盖Sub以检查值是否为数字

时间:2019-06-20 03:47:28

标签: vb.net

我正在处理两个用户输入控件TextInput和NumericInput的问题。 TextInput接受所有字符,而NumericInput仅接受数字输入。

我知道对于我的NumericInput Add Sub,我可能必须创建一个布尔值以检查输入值是否为数字,然后使用该布尔值创建一个If语句,但是,我不确定如何去解决这个问题。

这是我能想到的代码。

对于我的TextInput代码,我目前具有以下内容:

 Dim value As String 'current value'

     Public Class TextInput
         Public Overridable Sub Add(c As Char)
             If value.length = 0 Then
                 value = Char.toString(c)
             Else
                 value+=c
             End If
         End Sub

         Public Function GetValue() As String
             Return value
          End Function
     End Class

对于我的NumericInput代码,我目前具有以下内容:

     Public Class NumericInput
         Inherits TextInput

         Dim numericCheck As Boolean

         Public Overrides Sub Add(c As Char)
             If Not value.length = 0 Then
                 numericCheck = isNumeric(value)
             End If

             If numericCheck = True Then
                 value+=c
             End If
         End Sub
     End Class

输出代码如下:

Public Sub Main()
        Dim input As TextInput = New NumericInput()
        input.Add(CChar("1"))
        input.Add(CChar("a"))
        input.Add(CChar("0"))
        Console.WriteLine(input.GetValue())
    End Sub

1 个答案:

答案 0 :(得分:1)

首先,变量值应封装在TextInput类中。您可以将其声明为受保护的,以便派生类可以访问它。 value变量必须具有初始值,否则必须为value。Length引发异常,因为它为null(无)。

第二,您可以使用IsNumeric函数检查字符是否为数字。如果是数字,然后调用Add的基本方法。

Public Class TextInput
    Protected value As String = "" 'current value'
    Public Overridable Sub Add(c As Char)
        If value.Length = 0 Then
            value = Char.toString(c)
        Else
            value += c
        End If
    End Sub

    Public Function GetValue() As String
        Return value
    End Function
End Class

Public Class NumericInput
    Inherits TextInput

    Public Overrides Sub Add(c As Char)
        If IsNumeric(c) Then
            MyBase.Add(c)
        End If
    End Sub
End Class