是否有办法将字段组划分为“子结构”?在类内部

本文关键字:子结构 结构 内部 字段 划分 是否 | 更新日期: 2023-09-27 18:07:19

我正在为我的项目管理软件添加一个业务仪表板模块。
仪表板将很少被一小群用户使用,因为我希望避免使用静态/共享类或每次执行都会消耗硬件资源。


我的愿望是所有的仪表板颜色将从实例 Class: DashBoardGUI内的字段初始化,最终将被Disposed/垃圾收集。

这样做的目的是为程序员提供轻松更改共享颜色的能力,也为用户提供自定义首选颜色并将其保存在数据库中。

类非常基本,没有构造函数,没有大型或资源密集型对象,只有Color类型的字段。

问题是有很多字段(~35),所以我在开发GUI时很难识别所有字段。

我的意思是,如果我想从DashBoardGUI实例调用一个字段它非常令人困惑,看起来像这样:

Public Class CreateGUI
Inherits System.Windows.Forms.Panel
    Private ColorKit As New DashBoardGUI
    Protected Overridable Sub Init()
        RightFlowLayOutPannel.BackColor = ColorKit.someConfusingFieldName1
        LeftFlowLayOutPannel.BackColor = ColorKit.someConfusingFieldName2
        RightClockGraph.BackColor = ColorKit.someConfusingFieldName3
        LeftGroupBox.ForeColor = ColorKit.someConfusingFieldName4
    End Sub
End Class

我的愿望是获得像使用名称空间一样的效果,"。"符号将减少选项并引导我到所请求的字段:

Public Class CreateGUI
Inherits System.Windows.Forms.Panel
    Private ColorKit As New DashBoardGUI
    Protected Overridable Sub Init()
        RightFlowLayOutPannel.BackColor = ColorKit.FlPannels.FieldName
        LeftFlowLayOutPannel.BackColor = ColorKit.FlPannels.FieldName
        RightClockGraph.BackColor = ColorKit.Clocks.FieldName
        LeftGroupBox.ForeColor = ColorKit.GroupBoxes.FieldName
    End Sub
End Class

我已经尝试在 DashBoardGUI类中创建nested Structuresnested Classes ,但编译器不让我使用它们,如果它们被声明为静态/共享。如果我将它们声明为共享,这也是不可能的:

shared is not valid on a structure deceleration(我明白为什么)。

所以我的问题是:我如何才能得到类似于使用多个共享类的命名空间的效果-调用字段,如:xxx.yyy.myfield当我使用实例类?
也许有人有完全不同的方法,可以给我一些建议?
也许我节省资源的方法(在上面解释)是错误的,我应该用静态/共享类创建名称空间?

谢谢。

是否有办法将字段组划分为“子结构”?在类内部

我没有读这个问题,但也许是这样的:

Class A
    Class B
        Public myfield%
    End Class
    Public yyy As New B
End Class
样本使用:

Dim xxx As New A
xxx.yyy.myfield = 123

您可以像

中显示的那样将您想要的字段分组到类中

在VB中定义String ENUM。净

Class FlPanels
    Private Key As String
    Public Shared ReadOnly confusingField1 As FlPanels = New FlPanels("confusingField1")
    Public Shared ReadOnly confusingField2 As FlPanels = New FlPanels("confusingField2")
    Private Sub New(key As String)
        Me.Key = key
    End Sub
    Public Function FieldName() As String
        Return Me.Key
    End Function
End Class

,并像这样使用:

FlPanels.confusingField1.FieldName