VB.NET如何判断新类实例是否提前结束?

时间:2011-09-21 18:25:39

标签: vb.net visual-studio-2010 class

我正在尝试检测我班级中的Sub New()是否由于缺少字段而提前结束。以下是我的代码示例:

Class Account
    Public Sub New(ByVal Firstname As String, ByVal LastName As String, ByVal Username As String, ByVal Email As String, ByVal Password As String)
        ' Check For Blank Fields
        If Firstname = "" Or LastName = "" Or Username = "" Or Email = "" Or Password = "" Then
            MessageBox.Show("Please Enter All Information Requested")
            Exit Sub
        End If
        ' Set Public Variables Of Class
        Firstname = Firstname
        LastName = LastName
        Username = Username
        Email = Email
        Password = Password
    End Sub

    Public Shared Sub OtherUse()

    End Sub
End Class
' Create New Instance
Dim Process As New Account(txtFirstName.Text, txtLastName.Text, txtUsername.Text, txtEmail.Text, txtPassword.Text)
' HERE - How Can I Catch The Early Exit From The Instance Due To Potential Missing Fields?

' Use Instance For Other Use
Process.OtherUse()

如何从父表单中的类中捕获Exit Sub以防止进一步处理Process.OtherUse()?

2 个答案:

答案 0 :(得分:4)

你正在以错误的方式解决这个问题。首先验证输入,然后在输入有效后,使用New创建一个新帐户。

另一种选择是在New中初始化数据而不检查它是否有效,然后在该类中有一个IsValid方法,你可以从另一个类调用它来知道是否应该显示消息框。

以这种或那种方式,Account类不应该像在屏幕上显示MessageBox一样关注UI问题。构造函数应该只负责构造对象,而不是验证输入,因为你不能“中止”构造函数。即使您拨打Exit Sub,也可以引用新对象。

答案 1 :(得分:1)

第四种选择,除了Meta-Knight提到的三种选择之外:

当参数无效时,让构造函数抛出异常

另外,在工作时使用Or是一个逻辑错误:AndOr按位算术操作。您需要一个逻辑操作,OrElse(还有AndAlso)。这些似乎与OrAnd类似,在这种特殊情况下,两者都恰好起作用。但它们在语义上实际上是完全不同的,按位操作在这里是错误的(很可惜这个代码甚至编译。编译器不应该允许这样做。)