以下類用於ASP.NET應用程序從數據庫結果集中讀取貨幣並將其添加(例如,以美元顯示總計加顯示總計以GB磅爲單位)。它的工作原理以下方式:繼承一個類以刪除一個屬性並更改方法邏輯
- 讀貨幣ID值
- 如果貨幣ID已經存在,增加了總該貨幣
- 如果貨幣ID不存在,將其添加到它的值列表
- 下一頁
它的工作原理以及使用CurrencyID
財產爲每一個獨特的貨幣之間的區別。但是,現在已經很明顯,默認情況下,IsoCurrencySymbol
對於每種貨幣也是唯一的,所以CurrencyID
實際上並不需要。
所以...我想知道是否可以從這個類繼承並刪除任何對CurrencyID
的引用,因此使CompareTo
方法使用IsoCurrencySymbol
來代替。
訣竅是將現有的類廣泛使用,但引入一個不需要CurrencyID
的修改版本。這可能嗎?
<Serializable()> _
Public Class CurrencyCounter
<Serializable()> _
Private Class CurrencyType
Implements IComparable
Public IsoCurrencySymbol As String
Public CurrencySymbol As String
Public CurrencyID As Int16
Public Amount As Decimal
Public Function CompareTo(obj As Object) As Integer Implements System.IComparable.CompareTo
If Not TypeOf (obj) Is CurrencyType Then
Throw New ArgumentException("Object is not a currency type")
Else
Dim c2 As CurrencyType = CType(obj, CurrencyType)
Return Me.CurrencyID.CompareTo(c2.CurrencyID)
End If
End Function
End Class
Private _Currencies As List(Of CurrencyType)
Public Sub New()
_Currencies = New List(Of CurrencyType)
End Sub
Private Sub AddStructToList(CurrencyID As Integer, IsoCurrencySymbol As String, CurrencySymbol As String, Amount As Decimal)
If IsoCurrencySymbol <> String.Empty AndAlso Amount > 0 Then
Dim s As New CurrencyType
s.CurrencyID = CurrencyID
s.IsoCurrencySymbol = IsoCurrencySymbol
s.CurrencySymbol = CurrencySymbol
s.Amount = Amount
_Currencies.Add(s)
End If
End Sub
Public Sub Add(CurrencyID As Integer, IsoCurrencySymbol As String, CurrencySymbol As String, Amount As Decimal)
Dim ct As CurrencyType = _Currencies.Find(Function(obj) obj.CurrencyID = CurrencyID)
If ct IsNot Nothing Then
ct.Amount += Amount
Else
AddStructToList(CurrencyID, IsoCurrencySymbol, CurrencySymbol, Amount)
End If
End Sub
Public Sub Clear()
_Currencies.Clear()
End Sub
Public Function Count() As Integer
Return _Currencies.Count
End Function
Public Function RenderTotals() As String
' ...
End Function
End Class
嗨史蒂文。這是一個非常好的答案。非常感謝您抽出時間將其分解到我的外行人員身上:-) – EvilDr 2013-02-21 16:30:30