首页 > 解决方案 > 覆盖 Sub 以检查值是否为数字

问题描述

我正在处理两个用户输入控件 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

标签: vb.net

解决方案


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

其次,您可以使用 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

推荐阅读