Я играл с реализацией абстрактного базового класса, который с помощью отражения выполняет сопоставление SQL с объектами.
Я сделал несколько тестов и решил, что хочу реализовать стратегию кэширования для информации о свойствах объектов (чтобы предотвратить последующий поиск по ним). Моим первым инстинктом было попытаться реализовать нечто подобное.
Public MustInherit Class BaseModel
Implements IFillable
Private Shared PropertyCache As List(Of PropertyInfo)
Sub New()
PropertyCache = New List(Of PropertyInfo)
For Each itm As PropertyInfo In Me.GetType().GetProperties
PropertyCache.Add(itm)
Next
End Sub
End Class
но потом я понял, что это, очевидно, не сработает, потому что будет переопределено при последующих экземплярах объекта.
Так что теперь я застрял, как вы можете реализовать абстрактный класс, который кэширует свое отражение "метаданных"?
EDIT:
Это лучшее (решение моей проблемы), которое я могу придумать. Надеюсь, кто-то может предложить что-то лучшее?
Public MustInherit Class BaseModel
Implements IFillable
Private Shared ReadOnly PropertyCache As New Dictionary(Of String, PropertyInfo)
Sub New()
Dim typeName As String = Me.GetType.ToString
For Each itm As PropertyInfo In Me.GetType().GetProperties
Dim lookupKey As String = String.Format("{0}_{1}", typeName, itm.Name)
If Not PropertyCache.ContainsKey(lookupKey) Then
PropertyCache.Add(lookupKey, itm)
End If
Next
End Sub
End Class