vb6 - 使用结构作为 class 属性 类型

vb6 - Using a structure as a class property type

我正在尝试完成一个项目,但遇到了 class 属性 类型的问题。

我可以将 class 属性 声明为 Coord 吗?

Public Property Coord() As Coord
    Get
        Return coordinate
    End Get
    Set(ByVal Value As Coord)
        coordinate.x = Value.x
        coordinate.y = Value.y
    End Set
End Property

Public Structure Coord
    Public x As Integer
    Public y As Integer
End Structure

我在编译时遇到这个错误:

An unhandled exception of type 'System.MissingMemberException' occurred in Microsoft.VisualBasic.dll Overload resolution failed because no accessible 'Coord' accepts this number of arguments.

设置为:

Current.Coord(NewCoord)

其中 NewCoord 是 Coord 类型

您的部分问题可能源于使用 "Coord" 一词作为您的 class 名称和结构名称。我怀疑您需要在项目属性编译选项中打开 Option StrictOption ExplicitOption Infer

正如@Mary 在上面的评论中所说,如果您的 Coord class 纯粹是为了存储 x,y 坐标,那么您最好查看 Point 结构。但是,如果您需要 Coord class 中的一些其他功能,我仍然会考虑放弃您的 Coord 结构并使用点结构。考虑这个

Private Class CoordClass
    Private coordinate As New Point
    Public Property Coord() As Point
        Get
            Return coordinate
        End Get
        Set(value As Point)
            coordinate = value
        End Set
    End Property
End Class

然后就可以这样使用了

Dim aCoordinate As New Point
aCoordinate.x = 3
aCoordinate.y = 8

coordInstance.Coord = aCoordinate

coordInstance.Coord = New Point(4, 5)

比重命名您的 Coord 结构以便它不会与您混淆 Coord class 并且必须使用诸如

之类的东西分配值的替代方法要简单得多
Dim aCoordinate As New Coord.structCoord
aCoordinate.x = 3
aCoordinate.y = 8

coordInstance.Coord = new coord.structCoord with {.x=4 , .y=5}

最重要的是

点结构内置于 .net 中,在 6 个月内更易于维护,或由其他程序员维护。