代码之家  ›  专栏  ›  技术社区  ›  StormShadow

新手问题:如何创建一个类来保存VisualBasicStudio中的数据?

  •  1
  • StormShadow  · 技术社区  · 14 年前

    我真的很抱歉。这似乎是一个非常愚蠢的问题,但除非我问出来,否则我永远也找不到答案。我正在写一个程序,用Visual Basic在csv文件中读取它(我试着放弃了使用C语言),我问了我的一个朋友,他比我擅长编程。他说我应该创建一个类来保存我读入的数据。

    问题是,我以前从未创建过一个类,而不是VB、Java或任何东西。我知道所有与课程相关的术语,我从高层理解课程是如何工作的,没有问题。但我对制作一个的实际细节很感兴趣。

    我是这样做的:

    Public Class TsvData
    
        Property fullDataSet() As Array
    
            Get
                Return ?????
            End Get
    
            Set(ByVal value As Array)
    
            End Set
    
        End Property
    
    End Class
    

    我一直走到问号处就被卡住了。 这个类将包含很多数据,所以我将它做成了一个数组。那可能是个糟糕的举动。我不知道。我只知道它不能是字符串,也不能是整数或浮点。

    至于getter和setter,我之所以输入问号是因为我想返回整个数组。类最终将具有其他属性,这些属性基本上是相同数据的排列,但这是完整集,当我想保存它或其他东西时,将使用它。现在我想返回整个数组,但键入“return fulldataset()”似乎不是一个好主意。我的意思是,属性的名称是“fulldataset()”,它只会产生某种循环。但是没有其他数据可以返回。

    我要变暗吗 另一个 属性中已经是数组的数组,是否返回该数组?

    3 回复  |  直到 13 年前
        1
  •  2
  •   Philipp    14 年前

    通常使用私有成员存储实际数据:

    Public Class TsvData
    Private _fullDataSet As String()
    Public Property FullDataSet() As String()
        Get
            Return _fullDataSet
        End Get
        Set(ByVal value As String())
            _fullDataSet = value
        End Set
    End Property
    

    注意,这是一个糟糕设计的实例,因为它将一个概念与一个具体的表示相耦合,并允许类的客户机在不进行任何错误检查的情况下修改内部。返回A ReadOnlyCollection 或者一些专用的容器会更好。

        2
  •  3
  •   stakx - no longer contributing Saravana Kumar    14 年前
    1. 你不必编写自己的类,而是可以熟悉预先定义的类。 System.Data.DataTable 然后用它保存csv数据。

    2. 在最近几年我一直在编程,我从来没有实际使用过多维数组,我建议你也不要使用它们。通常有一些方法可以通过更好的数据结构实现相同的目标。例如,考虑创建一个类(我们称之为 CsvRecord )它只保存一条记录,也就是说,只有一行来自csv文件。然后使用 System.Collections.Generic 命名空间(例如 List(Of CsvRecord) )在csv文件中保存整个数据(即所有行)。这有效地减少了问题,“如何在一行csv数据中读取?”

    3. 如果你想更进一步地接受建议2,就按 并不是简单地把你读到的信息 CSV记录 ;相反,创建一个反映实际内容的对象。例如,如果您的csv文件包含产品-价格信息,请调用csv记录类。 ProductInfo 或者更合适的东西。

    4. 但是,如果您想继续使用当前的方法,则需要 背衬域 财产,如 菲利普 的答案。然后,您的财产将成为一个“立面”,仅代表这个支持领域。这不是绝对必要的:您可以简单地创建支持字段 Public 让类的用户直接访问它,尽管这不是一个好的实践。

        3
  •  3
  •   cHao    14 年前

    理想情况下,您应该有一个类来表示您想要读入的特定数据。一次设置一个完整的数组会带来麻烦;如果所有行的列数都不相同,那么一些读取c,t sv文件的程序就会崩溃,如果您可以将数据设置为任意长度的数组,这非常容易做到。

    如果您试图表示任意数据,坦率地说,您也可以使用 List(Of String) . 如果它是一个表,您可以改为在第一行中读取并将其列为如上所述的列表(我们称之为“headers”),然后将每一行设为 Dictionary(Of String, String) . (让我们称每一行为“row”,集合(这些字典对象的列表)为“row s”。)只需在行中读取,像您第一次那样拆分它,然后说类似的话 row(headers(column number)) = value 对于每个列,然后将其填充到“行”中。

    或者,您可以使用数据类( System.Data.DataTable System.Data.DataSet 会创造奇迹的。