2011-09-21 3 views
1

J'essaye de détecter si le Sub New() dans ma classe s'est terminé tôt en raison de champs manquants. Voici un exemple de mon code:VB.NET Comment savoir si une nouvelle instance de classe a été terminée plus tôt?

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() 

Comment puis-je prendre la sortie Sub de la classe sous la forme mère pour empêcher le traitement ultérieur de Process.OtherUse()?

Répondre

4

Vous abordez ce problème dans le mauvais sens. Validez l'entrée en premier, puis une fois l'entrée valide, créez un nouveau compte en utilisant New.

Une autre option serait d'initialiser les données en Nouvelle sans vérifier si elle est valide ou non, ont alors une méthode IsValid dans cette classe que vous appelez d'une autre classe de savoir si oui ou non doit être affiché le messagebox.

D'une manière ou d'une autre, la classe de compte ne devrait pas être responsable d'une préoccupation de l'interface utilisateur comme l'affichage d'un MessageBox sur l'écran. Et le constructeur devrait seulement être responsable de la construction de l'objet, ne validant pas l'entrée, parce que vous ne pouvez pas "abandonner" un constructeur. Vous avez une référence à un nouvel objet même si vous appelez Exit Sub.

1

Une quatrième variante, en plus des trois mentionnés par Meta-Knight:

Demandez au constructeur lancer une exception lorsque les paramètres ne sont pas valides.

En aparté, votre utilisation de Or, tout en travaillant, est une erreur logique: And et Or sont opérations arithmétiques de au niveau du bit. Vous voulez une opération logique, OrElse (il y a aussi AndAlso). Ceux-ci peuvent sembler similaires à Or et And et dans ce cas particulier, les deux se produisent au travail. Mais ils sont en fait sémantiquement différents, les opérations sur les bits sont juste fausses ici (c'est dommage que ce code compile même le compilateur ne devrait pas le permettre).

+0

Et et Ou sont également des opérateurs booléens qui ne court-circuitent pas en VB. –

+0

@Chris Mais pas pour une bonne raison. Ils ne devraient pas être définis de cette façon. –

+0

Merci, je cherchais l'opérateur OrElse mais je ne pouvais pas y penser du haut de ma tête, pensais à AndOr pour une raison quelconque! Je l'ai changé maintenant :) – Chris

Questions connexes