Vb.net 具有特性的合成 编辑:

Vb.net 具有特性的合成 编辑:,vb.net,oop,Vb.net,Oop,澄清一下,这些东西,屏幕和字段,都是我无法控制的真实世界(至少在计算机内部是真实的)。屏幕是古代COBOL程序中包含的数据视图,字段是屏幕上数据所在的位置 我所构建的是用来取代与这些屏幕和字段交互的低级程序方法。您可能认为这些对象类似于数据库中的表和列。现在,我必须编写大量的“管道”,比如说,更新特定屏幕上的一个字段,我必须复制这些代码,以便使用不同的字段。我想了解的是一个代码库,它允许我简单地设置对象的属性以更新字段,例如MyScreen.MyField.Value= 原职: 我正在构建一个包

澄清一下,这些东西,屏幕和字段,都是我无法控制的真实世界(至少在计算机内部是真实的)。屏幕是古代COBOL程序中包含的数据视图,字段是屏幕上数据所在的位置

我所构建的是用来取代与这些屏幕和字段交互的低级程序方法。您可能认为这些对象类似于数据库中的表和列。现在,我必须编写大量的“管道”,比如说,更新特定屏幕上的一个字段,我必须复制这些代码,以便使用不同的字段。我想了解的是一个代码库,它允许我简单地设置对象的属性以更新字段,例如
MyScreen.MyField.Value=

原职: 我正在构建一个包装器类集合,这些包装器类表示我认为最好从组合而不是关联的角度来理解的对象。简单地说,我有一个
屏幕
对象,它需要包含n个
字段
对象。这些字段属于它们声明所在的屏幕,不应在其屏幕上存在,但必须从屏幕外部访问

然而,我正在为如何实现这种关系而挣扎。我的OOP知识告诉我应该使用属性来管理它。比如:

Private Class MyScreen
    Inherits Screen

    Private _myField As Field
    Public ReadOnly Property MyField() As Field
        Get
            Return _myField
        End Get
    End Property

    Public Sub New()

        MyBase.New()
        _myField = New Field()

    End Sub

End Class
然而,鉴于我可以轻松做到这一点,上述内容似乎过于冗长:

Private Class MyScreen
    Inherits Screen

    Public Readonly MyField As Field
    
    Public Sub New()

        MyBase.New()
        MyField = New Field()

    End Sub

End Class

一个或另一个是更好的选择?还有第三种选择我没有看到吗?

为什么不使用合成呢


您可以创建一个
ScreenWorker
类,该类可以在每个屏幕上实例化。这个
ScreenWorker
类允许您从
Screen
类中设置参数,允许您根据传递给它的参数重用执行繁重工作的代码?

如果这将在集合中结束,并且该集合可能在集合编辑器中使用,则字段是错误的。UITypeEditor不会对它们进行相同的处理。数据绑定也是如此。它之所以冗长是因为它是只读的,否则它可能会使用自动/折叠/速记语法。您描述的问题太抽象了。真正的问题是什么?你不应该仅仅因为模式存在就使用它们。代码中的每个字符都必须有意义。@neolik-谢谢。我编辑这篇文章是为了澄清一些事情。@putinoix-我不想让屏幕或字段成为集合的一部分,但我猜我没有抓住你评论的要点,因为我不明白你说的UITypeEditor是什么意思。你可以有一个通用包装器,它可以通过字符串访问它的成员。这些可以是常量,因此错误空间更小。像你计划的那样多做管道工程对我来说是一种过度劳累。