Pregunta

Digamos que tienes una clase con una propiedad Uri. ¿Hay alguna manera de hacer que esa propiedad acepte tanto un valor de cadena como un Uri? ¿Cómo lo construirías?

Me gustaría poder hacer algo como uno de los siguientes, pero ninguno de ellos es compatible (usando VB, ya que le permite especificar el tipo en la declaración de conjunto para el segundo):

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

Dado que probablemente no se admitirán pronto, ¿de qué otra manera podría manejar esto? Estoy buscando algo un poco mejor que simplemente proporcionar un método adicional de .SetLink (valor de cadena) , y todavía estoy en .Net2.0 (aunque si las versiones posteriores tienen una buena característica para esto , Me gustaría saberlo).

Puedo pensar en otros escenarios en los que es posible que desees proporcionar este tipo de sobrecarga: una clase con un miembro de SqlConnection que te permite establecer una nueva conexión o una nueva cadena de conexión, por ejemplo.

¿Fue útil?

Solución

Como alternativa, puede, por supuesto, evitar la sobrecarga y simplemente nombrar las propiedades de forma adecuada:

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

Por supuesto, no tiene que hacer este WriteOnly pero parece apropiado.

Otros consejos

Creo que solo necesitas proporcionar un acompañamiento

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

No hay nada mejor, AFAIK.

  

Digamos que tienes una clase con una propiedad Uri. ¿Hay alguna forma de hacer que esa propiedad acepte tanto un valor de cadena como un Uri?

No, porque esto significaría tener dos captadores que varían solo en su tipo de devolución y esto no está permitido en .NET.

Usaré el método Uri exclusivamente y tal vez crearé un método conveniente para establecer la propiedad URI , dada una cadena. Sin embargo, dado que la conversión de String a URI es sencilla, incluso esto podría no ser necesario.

No puede tener una propiedad como esa, pero puede crear dos propiedades que manipulen el mismo campo subyacente, al igual que Altura / Ancho / Tamaño en los formularios Windows Forms.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top