Как использовать общие переменные производного класса в общих методах базового класса - PullRequest
1 голос
/ 04 июня 2010

Я пытаюсь добавить общие члены в производные классы и использовать эти значения в базовых классах ...

У меня есть база

class DBLayer
    public shared function GetDetail(byval UIN as integer)
    dim StrSql = string.format("select * from {0} where uin = {1}", tablename, uin)
    ....
    end function
end class

мой производный класс

class User inherits dblayer
    public shared tabledname as string = "users"
end class

class item inherits dblayer
    public shared tabledname as string = "item"
end class

class category inherits dblayer
    public shared tabledname as string = "category"
end class

В настоящее время есть ошибка при использовании переменной tablename производного класса в моем базовом классе.

Ответы [ 2 ]

0 голосов
/ 05 июня 2010
Class User
    Inherits DBLayer
    Public Shared Shadows Function TableName() As String
        Return "users"
    End Function
    Public Overrides Function GetTableName() As String
        Return User.TableName
    End Function
End Class

MustInherit Class DBLayer
    MustOverride Function GetTableName() As String

    Public Function GetDetail(ByVal UIN As Integer)
        Return GetDetail(UIN, GetTableName)
    End Function

    Public Shared Function GetDetail(ByVal UIN As Integer, ByVal TableName As String)
        Dim StrSql As String = String.Format("select * from {0} where uin = {1}", TableName, UIN)
        Return StrSql
    End Function

End Class

Class DBLayer

    Private _tableName As String
    Public Property TableName() As String
        Get
            Return _tableName
        End Get
        Set(ByVal value As String)
            _tableName = value
        End Set
    End Property

    Public Sub New(ByVal tableName As String)
        _tableName = tableName
    End Sub
    Public Function GetDetail(ByVal UIN As Integer)
        Return GetDetail(UIN, Me.TableName)
    End Function

    Public Shared Function GetDetail(ByVal UIN As Integer, ByVal TableName As String)
        Dim StrSql As String = String.Format("select * from {0} where uin = {1}", TableName, UIN)
    End Function

End Class
0 голосов
/ 04 июня 2010

Я бы создал

Protected MustInherit Readonly Property TableName as string

в базовом классе. И тогда каждый из дочерних классов должен будет переопределить его и вернуть правильное имя из свойства.

Так что в одном из дочерних классов это будет:

Protected OverRides Readonly Property TableName as string
   Get
       Return "users" ' or category or item etc
   End Get
End Property
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...