Method to "override" shared Members in child classes

vb.net

Solution

I think you could use `Generics`. Here I´ve pasted an example

All the classes in your domain could inherit from Entity class

Public MustInherit Class Entity

    '...

End Class

Your Model class, with your method Find

Public Class Model

    Public Shared Sub Find(Of T As Entity)()

        ' You could know the name of T to find the table

        Dim tableName As String = GetType(T).Name

        '... 

    End Sub

End Class

One class of your domain, for example: User class

Public Class User
    Inherits Entity

    ' ...

End Class

And finally, an example of how could you instantiate the Find method

Model.Find(Of User)()

'...

I dunno if this is what you mean, do you find this helpfull?

Problem

At the moment I'm trying to create a kind of model in vb.net which can be used to create/fetch database entrys. I created a main class Model with a shared function to fetch the datasets, e.g. Model.find(). Now I'd like to create Classes which inherit the main Model-Class, e.g. a separate one for users: UserModel.find() => "SELECT * FROM users". What I need now is to find a way to tell the Class which table it should use. I thought about an abstract String "table" which is a constant in each "child-model", but how could this be implemented as it's not possible to override shared members? Thanks in advance! Edit: Maybe this will make it a little clearer what I mean: ``` Public Class Model Public Shared _controller As Controller Public Shared table As String Protected Shared tableFields As String() Shared reader As Npgsql.NpgsqlDataReader Public Shared Function find() Dim a As ArrayList = New ArrayList 'Test if the tablefields are already known to the class, if not, get them If tableFields Is Nothing Then getTableFields() End If Dim query As String = "SELECT " + String.Join(", ", tableFields) + " FROM " + table reader = _controller.executeReader(query) While reader.Read o = New Model Dim v As New Hashtable For Each field In tableFields v(field) = reader(field) Next o.values = v a.Add(o) End While reader.Close() Return DirectCast(a.ToArray(GetType(Model)), Model()) End Function Public values As Hashtable Public Sub New() End Sub End Class ``` So I want a shared method which finds all database entries and gives back an array of instances of its own type, e.g. Model(). That's why I wanted to keep the find-method shared and not bound to an instance.

Original source