Mesma propriedade, diferentes tipos
-
03-07-2019 - |
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
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