Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.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_Class_Object_Data Structures_Shared - Fatal编程技术网

我可以在VB.net中将对象添加到结构中吗?

我可以在VB.net中将对象添加到结构中吗?,vb.net,class,object,data-structures,shared,Vb.net,Class,Object,Data Structures,Shared,我有一块木材的数据结构。我已经构建了一个类来处理我想成为这个结构的长度成员的数据类型的维度(建筑、度量等)。VB说我不能在我的定义中使用“new”,除非我将成员设置为“Shared”。如果我将该成员设置为“共享”,那么当我尝试在代码中访问该成员时,将看不到数据 Public Structure PieceInfo Dim ProjectNumber As String Dim ProjectName As String Dim BuildingType As Strin

我有一块木材的数据结构。我已经构建了一个类来处理我想成为这个结构的长度成员的数据类型的维度(建筑、度量等)。VB说我不能在我的定义中使用“new”,除非我将成员设置为“Shared”。如果我将该成员设置为“共享”,那么当我尝试在代码中访问该成员时,将看不到数据

 Public Structure PieceInfo
    Dim ProjectNumber As String
    Dim ProjectName As String
    Dim BuildingType As String
    Dim BuildingNumber As String
    Dim BLevel As String
    Dim Batch As String
    Dim Trussname As String
    Dim Span As Single
    Dim PieceName As String
    Dim LumberType As String
    Shared PieceLength As New clsDimension
    Shared StockLength As New clsDimension
    Dim LeftSplicePlate As String
    Dim RightSplicePlate As String
End Structure

如何使用我的“clsDimension”对象作为结构的“Length”成员的数据类型?

正如所有注释所示:您应该将结构更改为类,因为您希望引用它。由于结构是值类型,类是引用类型,这就是您想要的:

Public Class PieceInfo
    Dim ProjectNumber As String
    Dim ProjectName As String
    Dim BuildingType As String
    Dim BuildingNumber As String
    Dim BLevel As String
    Dim Batch As String
    Dim Trussname As String
    Dim Span As Single
    Dim PieceName As String
    Dim LumberType As String
    Shared PieceLength As New clsDimension
    Shared StockLength As New clsDimension
    Dim LeftSplicePlate As String
    Dim RightSplicePlate As String
End Class

.NET结构没有默认构造函数,您必须创建自己的构造函数(或者创建一个函数来初始化值)。但这样做会破坏结构的目的

Public Structure PieceInfo
    Dim ProjectNumber As String
    Dim ProjectName As String
    Dim BuildingType As String
    Dim BuildingNumber As String
    Dim BLevel As String
    Dim Batch As String
    Dim Trussname As String
    Dim Span As Single
    Dim PieceName As String
    Dim LumberType As String
    Dim PieceLength As clsDimension
    Dim StockLength As clsDimension
    Dim LeftSplicePlate As String
    Dim RightSplicePlate As String

    Public Sub New(ByVal t As String)
        PieceLength = New clsDimension
        StockLength = New clsDimension
    End Sub
End Structure

但正如其他人所说,将其更改为类是正确的做法。类是引用类型,结构是值类型

这应该是一个类,而不是一个结构。为什么不在定义中不初始化PieceLength和StockLength呢?然后你可以创建一个构造函数,在那里你可以给他们分配clsDimension的实例。。为什么它应该是类而不是结构?因为我想使用对象作为数据类型?就像@SLaks所说的,那应该是一个类。有关何时选择结构或类的信息,请参见。基本上,结构应该是表示单个值且不可变的。我一直认为对象应该包含数据和更改该数据的方法。我想你可以说'clsDimension'可以改变它的成员的数据,所以这意味着整个事情应该是一个类。实际上,我在代码中使用了mrtig的建议,但下次遇到这种情况时,我将使用一个类。谢谢