Gleiche Eigenschaft, verschiedene Arten
-
03-07-2019 - |
Frage
Angenommen, Sie haben eine Klasse mit einer Uri-Eigenschaft. Gibt es eine Möglichkeit, dass die Immobilie zu erhalten akzeptieren sowohl einen String-Wert und einen Uri? Wie würden Sie es bauen?
Ich möchte in der Lage sein, so etwas wie eine der folgenden Aktionen zu tun, aber weder unterstützt (VB verwenden, da es Ihnen Typen in der Set-Deklaration für die 2. eine angeben kann):
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
Da diese werden wahrscheinlich nicht in absehbarer Zeit unterstützt werden, wie sonst würden Sie damit umgehen? Ich bin auf der Suche nach etwas ein wenig schöner als nur ein zusätzlichen .SetLink(string value)
Verfahren bereitgestellt wird, und ich bin immer noch auf .NET2.0 (obwohl, wenn neuere Versionen ein nettes Feature für diese haben, ich möchte davon hören).
Ich kann von anderen Szenarien denkt, wo Sie diese Art von Überlastung schaffen möchten: a. Klasse mit einem SqlConnection Mitglied, das Sie entweder eine neue Verbindung oder eine neue Verbindungszeichenfolge, zum Beispiel festlegen kann
Lösung
Alternativ können Sie natürlich verzichten Überlastung und nennen nur die Eigenschaften entsprechend:
Public WriteOnly Property UriString() As String
Set(ByVal value As String)
m_Uri = new Uri(value)
End Set
End Property
Natürlich müssen Sie nicht dieses WriteOnly
machen, aber es scheint angemessen.
Andere Tipps
Ich glaube, Sie nur ein begleitendes
zur Verfügung stellen müssenPublic Sub SetLink(ByVal value as String)
_link = new Uri(value)
End Sub
Nichts ist schöner verfügbar, AFAIK.
Angenommen, Sie haben eine Klasse mit einer Uri-Eigenschaft. Gibt es eine Möglichkeit, dass die Immobilie zu erhalten zu akzeptieren sowohl einen String-Wert und ein Uri?
Nein, weil dies bedeuten würde, zwei Getter aufweisen, die nur in ihrem Rückgabetyp variieren, und dies wird nicht in .NET erlaubt.
würde ich die Uri
Methode ausschließlich verwenden und vielleicht eine convenienec Methode schaffen die URI
Eigenschaft zu setzen, eine Zeichenfolge angegeben. Da jedoch die Umwandlung von String
zu URI
einfach ist, auch dies könnte überflüssig sein.
Sie können nicht eine Eigenschaft wie die haben, aber man konnte zwei Eigenschaften erzeugen, die beide das gleiche zugrunde liegende Feld manipulieren -. Wie Höhe / Breite / Größe in Windows Forms