VB.NET Как определить, был ли завершен новый экземпляр класса? - PullRequest
1 голос
/ 21 сентября 2011

Я пытаюсь определить, закончился ли 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 ]

4 голосов
/ 21 сентября 2011

Вы подходите к этой проблеме неправильно. Сначала проверьте правильность ввода, а затем, когда он будет действительным, создайте новую учетную запись, используя New.

Другой вариант - инициализировать данные в New, не проверяя, действительны они или нет, затем в этом классе есть метод IsValid, который вы вызываете из другого класса, чтобы узнать, должно ли отображаться окно сообщения. *

Так или иначе, класс Account не должен отвечать за проблемы пользовательского интерфейса, такие как отображение MessageBox на экране. И конструктор должен отвечать только за конструирование объекта, а не за проверку ввода, потому что вы не можете «прервать» конструктор. У вас есть ссылка на новый объект, даже если вы вызываете Exit Sub.

1 голос
/ 21 сентября 2011

Четвертая альтернатива, в дополнение к трем, упомянутым Meta-Knight:

Пусть конструктор выдает исключение , если параметры недопустимы.

Кроме того, использование Or во время работы является логической ошибкой: And и Or являются побитовой арифметикой операций.Вы хотите логическую операцию, OrElse (есть также AndAlso).Они могут показаться похожими на Or и And, и в этом конкретном случае оба работают.Но они на самом деле совершенно разные семантически, побитовые операции здесь просто неправильны (жаль, что этот код даже компилируется. Компилятор не должен этого допускать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...