【问题标题】:Get information from a higher class?从更高的班级获取信息?
【发布时间】:2011-02-26 20:44:19
【问题描述】:

我真的不知道如何表达这个问题,所以请多多包涵......

我有 3 个类:Server、Database 和 Table。每个类都有一个“名称”属性。我希望它如何工作是每个服务器可以有多个数据库,每个数据库可以有多个表。所以在 Server 类中我有这个属性。

Private _databases As List(Of Database)
Public Property Databases() As List(Of Database)
    Get
        Return _databases
    End Get
    Set(ByVal value As List(Of Database))
        _databases = value
    End Set
End Property

我在表的数据库类中有类似的东西。这现在很好用,因为我可以做这样的事情来获取服务器中的所有数据库。

For Each db In s.Databases 's being the server object
        Debug.Print(db.Name)

    Next

我想扩展这些课程。我希望服务器类处理所有连接信息,并且我希望其他类在其中使用服务器类的连接信息。

例如,我设置了一个服务器类并将连接字符串设置为服务器。然后我希望数据库类使用 serverclass.connectionstring 属性连接到服务器并获取所有数据库的列表。但我想将该代码保留在数据库类中。我该怎么做?

我附上了一些我想做的代码。

Public Class Server

Private _name As String
Public Property Name() As String
    Get
        Return _name
    End Get
    Set(ByVal value As String)
        _name = value
    End Set
End Property


Private _databases As List(Of Database)
Public Property Databases() As List(Of Database)
    Get
        Return _databases
    End Get
    Set(ByVal value As List(Of Database))
        _databases = value
    End Set
End Property
End Class

'-----New class  

Public Class Database

Private _name As String
Public Property Name() As String
    Get
        Return _name
    End Get
    Set(ByVal value As String)
        _name = value
    End Set
End Property


Private _tables As List(Of Table)
Public Property Tables() As List(Of Table)
    Get
        Return _tables
    End Get
    Set(ByVal value As List(Of Table))
        _tables = value
    End Set
End Property

'This is where I need help!
Private Sub LoadTables () 
    dim connectionstring as string = server.connectionstring 'Possible?

    'Do database stuff
End Class

感谢阅读!

【问题讨论】:

    标签: .net vb.net oop class


    【解决方案1】:

    在构建时将服务器传递给数据库,并设置一个字段。这是dependency injection 的一个非常基本的形式。

    【讨论】:

    • +1 表示链接及其名称。我一直在寻求了解更多信息!
    【解决方案2】:

    您必须在子类中包含对“所有者”类的引用。

    不使用代码(为了简洁起见),你现在有

    Server
    ----------
    Databases   -----> Database
    Name               ------------
                       Tables       -----> Table
                       Name                --------------
                                           Name
    

    想要的是这样的:

    Server
    ----------
    Databases   -----> Database
    Name               ------------
      ^                Tables       -----> Table
      |                Name                --------------
       --------------- Server              Name
                         ^                 Database
                         |-------------------|
    

    Database 类上的Server 属性和Table 类上的Database 属性旨在引用每个拥有它们的实例。

    【讨论】:

    • 谢谢,这是我想做的。
    【解决方案3】:

    我会亲自让数据库知道存储它的服务器,以便数据库知道根据给定的服务器连接到哪里。

    这样做看起来像:

    public class Database {
        public Database(Server server) {
            Server = server;
        }
    
        public Server Server { get; private set; }
    }
    

    【讨论】:

    • 感谢您让我知道我给您带来了一些东西。这是善良的。 =)
    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多