Même propriété, différents types
-
03-07-2019 - |
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.
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.