Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何用不同数量的属性值实例化类对象_Vb.net_Winforms_Class_Structure - Fatal编程技术网

Vb.net 如何用不同数量的属性值实例化类对象

Vb.net 如何用不同数量的属性值实例化类对象,vb.net,winforms,class,structure,Vb.net,Winforms,Class,Structure,最近我经常使用自定义类,我喜欢它们的强大功能,但我遇到了一些我无法解决和/或在网上找到任何有用的东西 我有一个类的列表,其中的属性我只希望存储从数据库中提取的信息 Public Class CustomClass Public _Values As String Public _Variables As String Public ReadOnly Property Values() As String Get

最近我经常使用自定义类,我喜欢它们的强大功能,但我遇到了一些我无法解决和/或在网上找到任何有用的东西

我有一个类的列表,其中的属性我只希望存储从数据库中提取的信息

Public Class CustomClass

        Public _Values As String
        Public _Variables As String


        Public ReadOnly Property Values() As String
            Get
                Return _Values
            End Get
        End Property

        Public ReadOnly Property Variables() As String
            Get
                Return _Variables
            End Get
        End Property

        Sub New(ByVal values As String, ByVal variables As String)
            _Values = values
            _Variables = variables
        End Sub
End Class

我将遍历一些数据库条目,并希望在点击它们时将它们存储到相应的属性中(因为我不会立即将它们全部可用,这是我的问题的一部分)。我只想一次添加一个值或变量,而不是同时添加两个,但是由于子过程'New'传递了两个参数,因此始终需要同时传递这两个参数。我发现解决这个问题的唯一方法是让它们成为可选字段,我觉得这不是解决这个问题的正确方法。我想用一个类做什么是可能的,还是使用一个结构更简单?

因为字符串的默认值是nothing,所以对于没有的值,可以不传递任何内容。即

Collection.Add(New CustomClass("My Value",Nothing))

每个类型都有一个默认值,因此这不仅仅适用于字符串。

您可以重载构造函数:

Friend Class Foo
    ' using auto-implement props:
    Public Property Name As String      ' creates a _Name backing field
    Public Property Value as Integer

    Public Sub New(newN as String, newV as Integer)
        ' access "hidden" backing fields if you want:
        _Name = newN
        _Value = newV
    End Sub

    Public Sub New()            ' simple ctor
    End Sub

    Public Sub New(justName As String)
        ' via the prop
        Name = justName
    End Sub
End Class
现在有3种方法可以创建对象:完全初始化、部分(仅名称)或作为空白对象。您通常需要一个“简单构造函数”——一个没有参数的构造函数——用于其他目的:序列化程序、集合编辑器等不知道如何使用参数化构造函数,需要一个简单的构造函数

如果应用程序中的规则是,除非定义了
Name
Value
,否则MyFoo没有存在的理由,那么只实现
New(String,Integer)
ctor将强制执行该规则。也就是说,首先是关于应用程序规则,然后是关于编码的便利性

Dim myFoo As New Foo         ' empty one
myFoo.Name = "ziggy"         ' we only know part of it

我不确定我是否理解这个问题。如果您没有获得足够的信息来构造对象,则推迟对象的创建。将属性存储在局部变量(或字段)中,然后在获得这两个属性后立即构造一个新对象。这就是你要问的吗?我最初的计划是获取表项,这些表项用逗号(“,”)分隔,然后将它们拆分成一个列表,然后迭代并将它们添加到此属性列表中,这导致我无法单独添加它们,除非像你所说的那样,将它们保存在临时变量中。如果我要走这条路,我必须创建多个“保持”变量,这不是什么大问题,但我只是想,如果我能从保持分割值的变量中处理这个问题,这将有助于提高可读性只是一个注释:您的字段应该是私有的。(例如,
Private\u值作为字符串