【问题标题】:if class y is inside of class x, why isnt instance of class y inside of instance?如果类 y 在类 x 内,为什么类 y 的实例不在实例内?
【发布时间】:2016-01-08 18:14:26
【问题描述】:

我正在为我正在编写的杂货应用程序编写一个 VB.NET 类库,但我认为我对 OOP 在 VB.NET 中的工作方式存在误解。我原以为如果class xclass y 中,那么class xinstance 也将在class yinstance 中,但显然不是案子。我将如何设置它以能够通过class y 访问class x 的实例?还有为什么实例 y 中没有实例 x?

(更新:我的意思是这个)

Public Class y
    Public Class x //class inside of class
    End Class
End Class
Public Class Form1
    Public Sub Form1_Load(<params>) Handles Me.Load
         Dim yinst As y = New y()
         Dim xinst As x = New y.x()
         MsgBox(yinst.xinst) //instance inside of instance
    End Sub
End Class

【问题讨论】:

  • 请举例说明你说class x was in class y
  • 这称为嵌套类,X 与 Y 不同,因为 Y 可以不仅仅是 X 的包装器。例如,X 不包含另一个 XNew x() 代码在真实的应用程序中不起作用,它必须是:New y.x()
  • 如何在 y 下添加 x 的实例?
  • 一些额外的官方.net recommendations

标签: vb.net oop inner-classes


【解决方案1】:

这会起作用(消息框调用除外),但我不确定这是否是您真正想要的。

Public Class y
   Public Class x '//class inside of class
   End Class
End Class

Public Class Form1
   Public Sub Form1_Load(<params>) Handles Me.Load
        Dim yinst As y = New y()
        Dim xinst As y.x = New y.x()
        'MsgBox(yinst.xinst) '//instance inside of instance
   End Sub
End Class

如果你想要一个 y 的实例有一个 x 的实例,那么我想你想要这样的东西:

Public Class y
    private x As New x 'A reference to an instance of x
    Public Class x 'class inside of class
    End Class
End Class

...或更好:

Public Class y
     Private _x As New x 'A reference to an instance of x
     Public Class x 'class inside of class
End Class

    Public Property InstX As x
        Get
            Return _x
        End Get
        Set(value As x)
            _x = value
        End Set
    End Property
End Class

在这两种形式中,x 都可以通过Dim xinst As y.x = yinst.InstX 访问。

【讨论】:

  • 你能解释一下Public Property 块吗?我以前从未见过这种结构
  • 否则,非常感谢
  • 您可以将实例变量设为私有,然后使用该属性间接公开它,而不是将其声明为公共变量。这使对象的代码有机会检查值、修改它们、运行代码等以响应设置或获取数据。
  • 在您发表评论之前,我认为在类的全局范围内声明的所有变量都是属性。那里有 VB.NET 类结构教程吗?
  • _x 中的_ 是否有任何意义,还是您只是按照惯例这样做?
猜你喜欢
  • 2012-05-27
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多