Pergunta

Vamos dizer que você tem uma classe com uma propriedade Uri. Existe alguma maneira de obter essa propriedade para aceitar tanto um valor de string e um Uri? Como você construí-lo?

Eu gostaria de ser capaz de fazer algo parecido com um dos seguintes, mas também não são suportados (usando VB, uma vez que permite que você especifique o tipo na declaração Set para o 2º um):

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

Tendo em conta que aqueles provavelmente não será suportado em breve, como mais você lidar com isso? Eu estou procurando algo um pouco melhor do que apenas fornecer um método .SetLink(string value) adicional, e eu ainda estou em .Net2.0 (embora se versões posteriores têm um bom recurso para isso, eu gostaria de ouvir sobre isso).

Não consigo pensar em outros cenários em que você pode querer fornecer este tipo de sobrecarga:. Uma classe com um membro do SqlConnection que lhe permite escolher uma nova ligação ou uma nova cadeia de conexão, por exemplo

Foi útil?

Solução

Como alternativa, você pode, naturalmente, abrir mão sobrecarga e apenas nomear as propriedades de forma adequada:

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

É claro que você não tem que fazer este WriteOnly mas parece apropriada.

Outras dicas

Eu acho que você só precisa fornecer um acompanhante

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

Nada mais agradável está disponível, AFAIK.

Vamos dizer que você tem uma classe com uma propriedade Uri. Existe alguma maneira de obter essa propriedade para aceitar tanto um valor de string e um Uri?

Não, porque isso significaria ter dois getters que variam apenas em seu tipo de retorno e isso não é permitido em .NET.

Gostaria de usar o método Uri exclusivamente e talvez criar um método convenienec para definir a propriedade URI, dada uma string. No entanto, desde a conversão de String para URI é simples, mesmo isso pode ser desnecessário.

Você não pode ter uma propriedade como esse, mas você pode criar duas propriedades que ambos manipulados ao mesmo campo subjacente -. Exatamente como altura / largura / tamanho no Windows Forms

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top