Question

Disons que vous avez une classe avec une propriété Uri. Est-il possible d'obtenir que cette propriété accepte à la fois une valeur de chaîne et un Uri? Comment le construiriez-vous?

J'aimerais pouvoir utiliser l'une des méthodes suivantes, mais aucune n'est prise en charge (à l'aide de VB, car cela vous permet de spécifier le type dans la déclaration Set pour la deuxième déclaration):

Class MyClass

    Private _link As Uri

   'Option 1: overloaded property
    Public Property Link1 As Uri
        Get
            return _link
        End Get
        Set(ByVal value As Uri)
           _link = value
        End Set
    End Property

    Public Property link1 As String
        Get
            return _link.ToString()
        End Get
        Set(Byval value As String)
           _link = new Uri(value)
        End Set
   End Property

   ' Option 2: Overloaded setter
   Public Property link2 As Uri
      Get
          return _link
      End Get
      Set(Byval value As Uri)
          _link = value
      End Set
      Set(Byval value As String)
          _link = new Uri(value)
      End Set
End Class

Étant donné que ceux-ci ne seront probablement pas pris en charge de si tôt, comment géreriez-vous cela? Je cherche quelque chose d'un peu plus agréable que de simplement fournir une méthode supplémentaire .SetLink (chaîne de valeur) , et je suis toujours sur .Net2.0 (bien que si les versions ultérieures ont une fonctionnalité intéressante pour cela , J'aimerais en entendre parler).

Je peux penser à d'autres scénarios dans lesquels vous pourriez souhaiter fournir ce type de surcharge: une classe avec un membre SqlConnection qui vous permet de définir une nouvelle connexion ou une nouvelle chaîne de connexion, par exemple.

Était-ce utile?

La solution

Sinon, vous pouvez bien sûr éviter la surcharge et nommer les propriétés de manière appropriée:

Public WriteOnly Property UriString() As String
    Set(ByVal value As String)
        m_Uri = new Uri(value)
    End Set
End Property

Bien sûr, vous n'avez pas besoin de faire ce WriteOnly mais cela semble approprié.

Autres conseils

Je pense que vous avez juste besoin de fournir un accompagnement

Public Sub SetLink(ByVal value as String)
    _link = new Uri(value)
End Sub

Rien de plus agréable n'est disponible, autant que je sache.

  

Disons que vous avez une classe avec une propriété Uri. Est-il possible d'obtenir que cette propriété accepte à la fois une valeur de chaîne et un Uri?

Non, car cela impliquerait d'avoir deux accesseurs dont le type de retour varie uniquement, ce qui n'est pas autorisé dans .NET.

Je voudrais utiliser la méthode Uri exclusivement et peut-être créer une méthode convenienec pour définir la propriété URI , à partir d'une chaîne. Cependant, étant donné que la conversion de String en URI est simple, cela peut même être inutile.

Vous ne pouvez pas avoir une propriété comme celle-là, mais vous pouvez créer deux propriétés qui manipulent le même champ sous-jacent - tout comme Hauteur / Largeur / Taille dans Windows Forms.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top