【问题标题】:Accessing property of a class without inherting the class在不继承类的情况下访问类的属性
【发布时间】:2012-04-07 00:20:46
【问题描述】:

我有一个类,它具有以下由构造函数中的方法生成的属性。

Public Class clsLoadTables
    Private _ds As New DataSet
    Public Property ds() As DataSet
        Get
            Return _ds
        End Get
        Set(ByVal value As DataSet)
            _ds = value
        End Set
    End Property

    Sub New()

        Try
            loadCSVTableII()
            loadXMLFiles(pathMainTable, "MainRMDTable")
            loadXMLFiles(pathBeneLifeExp, "pathBeneLifeExp")
        Catch ex As Exception
            MessageBox.Show(ex.Message)
            Throw
        End Try

    End Sub

End Class

我的问题是我不想继承这个类,但是我还有其他类需要访问 ds DataSet 属性。如果可能的话,我不想使用继承,也不想在程序中多次加载我的数据表。

这是我尝试访问未继承 clsLoadTables 的另一个类中的属性失败:

        Dim tableRow As DataRow = ds.Tables("MainRMDTable").Select(String.Format("age={0}",  age.ToString()))(0)

关于如何在不使用类继承或全局模块的情况下访问我只想在程序中从多个类加载一次的数据集的任何想法?

【问题讨论】:

  • 该类的目的是什么,它与全局模块(您不想使用)有何不同?
  • 您可以将其设为shared 并将其加载到shared constructor
  • Pavel - 你说的不对。我试图这样做是为了强迫自己成为一个更加面向对象的程序员
  • 蒂姆 - 我现在正在调查。感谢您的评论。

标签: .net vb.net oop class inheritance


【解决方案1】:

您拥有它作为公共属性,因此如果您有对 clsLoadTables 类实例的引用,您应该能够访问它。

Dim foo As New clsLoadTables

Dim tableRow As DataRow = foo.ds.Tables("MainRMDTable").Select(String.Format("age={0}",  age.ToString()))(0)

【讨论】:

  • 那不会重新运行我在构造函数中的方法吗?我在该类中使用 Sub New 将数据加载到数据集中。我只想调用一次。
  • @LanceCollins:您创建一个 clsLoadTables 对象并在整个过程中使用它。您不需要每次都重新创建一个新对象,您只需要保留对它的引用。确实,理想的方法是为此使用单例模式。
【解决方案2】:

对于 VB.Net 中的全局作用域,使用带有 PUBLIC 变量和 PUBLIC 方法或友元变量的 MODULE,例如

公共 _ds 作为新数据集

Friend _ds 作为新数据集

希望我没有误解你的问题..

【讨论】:

  • Sandeep - 感谢您的评论。那肯定会奏效。我试图看看我是否可以在不使用模块的情况下正确实现这一点,但如果使用模块被认为是最佳实践,那么你是绝对正确的。谢谢!
  • 是的,如果你使用这种方法,那么你不需要继承类,我建议你为这些情况创建一个 MODULE 来存储公共变量
【解决方案3】:

通常我为这样的事情所做的只是将您班级中的_ds 更改为shared 并在第一次访问您的属性的get 时加载数据。

【讨论】:

    最近更新 更多