在VB中,我有一个做一些标准验证的类。我要做的是声明一些变量,然后创建一个包含指向变量的指针的验证器类的实例,然后在稍后执行验证器以测试指向的字段中的值。
这样的事情:
public class MyData
public property foo as string
public property bar as string
dim vfoo as validator
dim vbar as validator
public sub new()
vfoo=new validator(&foo) ' i.e. & operator like in C
vbar=new validator(&bar)
end sub
public sub validate()
vfoo.validate
vbar.validate
end sub
end class
public class validator
dim _field as string* ' i.e. * like in C
public sub new(field as string*)
_field=field
end sub
public sub validate
if string.isnullorempty(_field) then
throw SomeException
else if not SomeOtherTest(_field) then
throw SomeOtherException
end sub
据我所知,在VB中没有像C指针那样的东西。有没有相当简单的方法来做到这一点?
目前我在调用validate()函数时传递字段值,但这并不理想,因为我希望能够创建特定于给定调用者的验证器列表,然后循环通过清单。但是在我循环的时候,我怎么知道从MyClass传入哪个值,除非我有一个巨大的选择语句来键入一些"字段代码"? (当然,在现实生活中,不仅有两个领域,例如本例,还有不少。)
我只是在大脑冻结,这是一个简单的方法吗?或者这不能在VB中完成,因为没有指针这样的东西?
答案 0 :(得分:1)
与Java类似,VB并不直接使用指针(它可以补偿库/框架调用的位置)。在垃圾收集语言的上下文中,我无法想象这种验证方式会很好。
但为了好玩,也许基于lambda的解决方案可能适合?:
Public Class MyData
Public Property foo As String
Public Property bar As String
Dim vfoo As validator
Dim vbar As validator
Public Sub New()
vfoo = New validator(Function() foo)
vbar = New validator(Function() bar)
End Sub
Public Sub validate()
vfoo.validate()
vbar.validate()
End Sub
End Class
Public Class validator
ReadOnly _fieldFunc As Func(Of String)
Public Sub New(fieldFunc As Func(Of String))
_fieldFunc = fieldFunc
End Sub
Public Sub validate()
Dim _field = _fieldFunc()
If String.IsNullOrEmpty(_field) Then
Throw New Exception("NullOrEmpty")
ElseIf Not SomeOtherTest(_field) Then
Throw New Exception("SomeOtherTest")
End If
End Sub
Public Function SomeOtherTest(f As String) As Boolean
Return True
End Function
End Class