vb.net - 覆盖 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
解决方案
首先,变量值应该封装在 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