2010-02-11 2 views
1

J'essaye de créer une propriété qui permettra le réglage d'un nom basé sur une variété d'entrées. Le code qui appelle ceci analyse un champ de nom. Dans certains cas, il aura un seul nom de famille, dans d'autres, un tableau de noms de famille qui doivent être concaténés. Je veux garder mon code de concaténation en un seul endroit pour faciliter la maintenance.Matrice de surcharge de jeu de propriétés et non-rangée

Voici mon code, ce qui bien sûr ne fonctionne pas:

 Public Property LastName() As String 
     Get 
      Return _LastName 
     End Get 
     Set(ByVal value As String) 
      _LastName = value 
     End Set 
    End Property 

    Public WriteOnly Property LastName() As String() 
     Set(ByVal value As String()) 
      For Each word As String In value 
       _LastName &= word & " " 
      Next 

      _LastName = _LastName.Trim 
     End Set 
    End Property 

J'ai essayé de nombreuses variations sur ce point, même mettre multifaces dans la même propriété, mais rien ne semble fonctionner. Il doit y avoir un moyen de prendre un tableau et une valeur d'instance unique. Le compilateur sait clairement si l'objet entrant est un tableau ou non.

J'ai essayé de travailler avec juste une propriété de type String(), mais je ne peux pas retourner une chaîne. La seule solution à laquelle je pense est celle des propriétés nommées différemment, ce qui rend l'utilisation de la classe plus difficile, ou tout un tas de sous-fonctions et de fonctions se surchargeant les unes les autres.

Suggestions?

Chris

Répondre

2

Vous ne pouvez pas surcharger les propriétés, afin que l'établissement soit par un string ou un string(), pas les deux.

ayant un nom Tenir compte différent pour la string() propriété:

Public WriteOnly Property LastNameArray() As String() 
    Set(ByVal value As String()) 
     For Each word As String In value 
      _LastName &= word & " " 
     Next 

     _LastName = _LastName.Trim 
    End Set 
End Property 
+0

J'essayais d'éviter d'avoir un nom différent pour la propriété pour chacune des raisons d'utilisation. – cjbarth

0

Si votre sortie va être d'un type différent de votre entrée, vous ne pouvez pas utiliser une propriété pour elle. Il n'y a rien de mal à utiliser une fonction pour cela, une bonne pratique dirait que vous avez le nom de la fonction (LastName), et ajoutez un verbe dessus (Get), donc vous finissez par une fonction similaire à GetLastName.

Public Function GetLastName(ByVal names As String()) As String 

(excusez mon VB très rouillé s'il y a quelque chose de mal flagrante)

0

Qu'en est-il quelque chose comme ceci:

 Public Property LastName() As Object 
     Get 
      Return _LastName 
     End Get 
     Set(ByVal value As Object) 
      If TypeOf (value) Is Array Then 
       For Each word As String In value 
        _LastName &= word & " " 
       Next 

       _LastName = _LastName.Trim 

      End If 
      If TypeOf (value) Is String Then 
       _LastName = value 
      End If 
     End Set 
    End Property 

Quelqu'un voit-il un problème avec ça?