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值作为字符串