次のコードがあります。ファンド.NETクラスで同じプロパティを再利用する方法
Public Class FundElement
Public Name As New FundDetail
Public Price As New FundDetail
Public Code As New CodeDetail
End Class
個々のデータフィールドの
基底クラス
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
そして、いくつかは、特定の分野に固有のロジックを保持するクラスを継承を保持するクラス。これは、各フィールドの単なる文字列ではなく、クラスを求めていた理由です。
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
は今、私の問題は、コーダーは、私は完全に非表示にするNAV要素へのアクセス権があることを意味し
Dim fund as new FundElement
FundElement.Name.Value = "Google Inc"
FundElement.Code.Value = "USD451234151234"
を次のように私のクラスのためのAPIであるということです。 APIは、必要以上に冗長です。私は、各fundDetailインスタンスがプライベートであるように、私は、クラスを変更することでこれを実装することができます
FundElement.Name = "Google Inc"
FundElement.Price = "USD451234151234"
を次のようにインターフェースになりたい、と
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
を次のように新しいプロパティを追加することによって、今、これは終わりましたわずか3人のメンバーのために非常に冗長です。さらに、各プロパティのコードはほとんど同じでした。入力するのが面倒で、読むのが面倒です。
新しいメンバーを追加するたびにプロパティを入力しなくても、これを達成できる方法はありますか?
なぜ文字列を常に値になりますで、より良いのですか?正規表現で数値を調べる – Paparazzi
なぜあなたのメソッドをシャドウしていますか?元のメソッドを「オーバーライド可能」とマークし、継承したメソッドに「オーバーライド」をマークする方が良いでしょうか? –
オーバーライド可能な関数は共有できないためです。 –