Stessa proprietà, diversi tipi
-
03-07-2019 - |
Domanda
Supponiamo che tu abbia una classe con una proprietà Uri. C'è un modo per far sì che quella proprietà accetti sia un valore di stringa che un Uri? Come lo costruiresti?
Mi piacerebbe essere in grado di fare qualcosa come uno dei seguenti, ma nessuno dei due è supportato (utilizzando VB, poiché consente di specificare il tipo nella dichiarazione Set per il secondo):
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
Dato che probabilmente non saranno presto supportati, in quale altro modo lo gestiresti? Sto cercando qualcosa di un po 'più bello del semplice fornire un ulteriore metodo .SetLink (valore stringa)
, e sono ancora su .Net2.0 (anche se se le versioni successive hanno una buona funzionalità per questo , Mi piacerebbe saperlo).
Posso pensare ad altri scenari in cui potresti voler fornire questo tipo di sovraccarico: una classe con un membro SqlConnection che ti consente di impostare una nuova connessione o una nuova stringa di connessione, ad esempio.
Soluzione
In alternativa, puoi ovviamente rinunciare al sovraccarico e nominare le proprietà in modo appropriato:
Public WriteOnly Property UriString() As String
Set(ByVal value As String)
m_Uri = new Uri(value)
End Set
End Property
Ovviamente non è necessario creare questo WriteOnly
ma sembra appropriato.
Altri suggerimenti
Penso che devi solo fornire un accompagnamento
Public Sub SetLink(ByVal value as String)
_link = new Uri(value)
End Sub
Non è disponibile nulla di meglio, AFAIK.
Supponiamo che tu abbia una classe con una proprietà Uri. C'è un modo per far sì che quella proprietà accetti sia un valore stringa sia un Uri?
No perché ciò significherebbe avere due getter che variano solo nel tipo di restituzione e ciò non è consentito in .NET.
Userei esclusivamente il metodo Uri
e forse creerei un metodo convenienec per impostare la proprietà URI
, data una stringa. Tuttavia, poiché la conversione da String
a URI
è semplice, anche questo potrebbe non essere necessario.
Non puoi avere una proprietà del genere, ma puoi creare due proprietà che hanno entrambi manipolato lo stesso campo sottostante, proprio come Altezza / Larghezza / Dimensione in Windows Form.