Ich habe den folgenden Code. Eine Klasse, die einem FondsWie Sie identische Eigenschaften auf .NET-Klasse wiederverwenden
Public Class FundElement
Public Name As New FundDetail
Public Price As New FundDetail
Public Code As New CodeDetail
End Class
eine Basisklasse für jedes einzelne Datenfeld
Public Class FundDetail
Protected _value As String
Public Property value As String
Get
Return _value
End Get
Set(valueToAssign As String)
If isValid(valueToAssign) Then
_value = valueToAssign
Else
Throw New ArgumentException
End If
End Set
End Property
Shared Function isValid(detail As String) As Boolean
Return True
End Function
End Class
Und einige geerbte Klassen halten wird, die Logik für bestimmte Felder halten wird. Aus diesem Grund wollte ich für jedes Feld eine Klasse und nicht nur eine Zeichenfolge.
Public Class CodeDetail
Inherits FundDetail
Public Shared Shadows Function isValid(value As String) As Boolean
Dim intPattern As Regex = New Regex("[a-zA-Z]{3}[0-9]{12}")
Return intPattern.IsMatch(value)
End Function
End Class
Nun ist mein Problem, dass die API für meine Klasse ist als
Dim fund as new FundElement
FundElement.Name.Value = "Google Inc"
FundElement.Code.Value = "USD451234151234"
folgt was bedeutet, dass Programmierer Zugriff auf das NAV-Element, die ich vollständig ausblenden möchten. Und die API ist ausführlicher als sie sein muss. Ich möchte, dass die Schnittstelle sein, wie
FundElement.Name = "Google Inc"
FundElement.Price = "USD451234151234"
folgt kann ich dies implementieren, indem die Klasse zu ändern, so dass jede fundDetail Instanz privat ist, und durch eine neue Eigenschaft hinzugefügt als
Public Class FundElement
Private _Name As New FundDetail
Public Property Name As String
Set(valueToAssign As String)
_Name.value = valueToAssign
End Set
Get
Return _Name.value
End Get
End Property
Private _Code As New FundDetails
Public Property _Code As String
Set(valueToAssign As String)
_Code.value = valueToAssign
End Set
Get
Return _Code.value
End Get
End Property
Private _Price As New PriceDetail
Public Property _Price As String
Set(valueToAssign As String)
_Price.value = valueToAssign
End Set
Get
Return _Price.value
End Get
End Property
End Class
Nun folgt das endete sehr ausführlich für nur 3 Mitglieder. Darüber hinaus war der Code für jede Eigenschaft fast identisch. Es ist mühsam zu tippen und unordentlich zu lesen.
Gibt es eine Möglichkeit, dies zu erreichen, ohne die Eigenschaften jedes Mal eingeben zu müssen, wenn ich ein neues Mitglied hinzufügen möchte?
Warum immer einen String würde schätzen? Regex zum Testen auf numerische – Paparazzi
Warum überschatten Sie Ihre Methode? Wäre es nicht besser, die ursprüngliche Methode 'Overridable' zu markieren und in der geerbten Methode' Overrides' zu markieren? –
Da überschreibbare Funktionen nicht gemeinsam genutzt werden können. –