VB.Net - 在类中使用子类

时间:2016-06-29 18:51:03

标签: vb.net class

尝试将一些VBA代码转换为VB.Net并在某些类问题上挂起。我有一个主要类:clsComputer。它有一个子类:clsHardDrive。由于计算机可以拥有1个以上的硬盘驱动器,因此clsComputer中的-ffast-mathGet属性如下所示:

Set

这允许我在代码中执行类似的操作:

Private pHardDrive(8) As clsHardDrive

Public Property Get HardDrive(index As Integer) As clsHardDrive
    If pHardDrive(index) Is Nothing Then Set pHardDrive(index) = New clsHardDrive
    Set HardDrive = pHardDrive(index)
End Property
Public Property Set HardDrive(index As Integer, value As clsHardDrive)
    pHardDrive(index) = value
End Property

但是,我不知道如何将其转换为VB.Net。我试过这个:

objComp.HardDrive(0).Size = "500"
objComp.HardDrive(1).Size = "1000"

但它给出了编译错误:Property HardDrive As HDD Get (ByVal index As Integer) Return pHardDrive(index) End Get Set (ByVal index As Integer, value As HDD) pHardDrive(index) = value End Set End Property

搜索该错误不是很有帮助:Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'. (BC30124)我同时拥有Get和Set,我认为它们已被正确终止。我也搜索过在另一个类中使用一个类的例子,但是我找不到任何有用的东西。

如何在VB中获得与VBA相同的功能? EG,如何创建HardDrive实例,以便一个计算机对象可以拥有多个硬盘对象?

1 个答案:

答案 0 :(得分:2)

VB.NET中的索引属性still exist,就像经典的基于COM的VB一样。

你的语法错误。索引属性实际上只是参数化属性的一个特例,因此index被视为整个属性的参数,而不是单个GetSet语句。

Public Class Computer

    Private m_hardDrives(8) As HDD

    Public Property HardDrive(ByVal index As Integer) As HDD
        Get
            Return m_hardDrives(index)
        End Get
        Set(ByVal value As HDD)
            m_hardDrives(index) = value
        End Set
    End Property

End Class