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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top