2016-06-29 5 views
0

いくつかのVBAコードをVB.Netに変換しようとしていて、いくつかのクラスの問題でハングアップしています。私はメインクラスclsComputerを持っています。サブクラスclsHardDriveがあります。コンピュータは、1つの以上のハードドライブを持つことができるので、それはGetSetプロパティがclsComputerで次のようになります:VB.Net - クラスのサブクラスを使用

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 

これは私のコードではこのような何かを行うことができます:

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

しかし、私は、これをVB.Netに変換する方法がわかりません。

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)

は非常に有用ではありません:To correct this error make sure you include both a Get procedure and a Set procedure between the Property statement and the End Property statement.私は両方の取得と設定している、と私は、彼らが正しく終端されていると思います。私はまた別のクラスの中であるクラスを使うことについての例を探しましたが、役に立たないものは何も見つかりませんでした。

私はVBAで持っているVB.Netと同じ機能をどのようにして得ますか?例えば、1つのコンピュータオブジェクトが多くのハードドライブオブジェクトを持つことができるように、HardDriveのインスタンスを作成するにはどうすればよいですか?

+0

は、ここでは一例https://msdn.microsoft.com/en-us/library/e8ae41a4.aspx –

+0

Dohのを見てください!そのページの#2: 'プロパティがパラメータをとる場合は、プロシージャの名前を指定したPropertyキーワードの後に​​カッコで囲まれたパラメータリストをたどってください.'したがって、 'Property HardDrive(Byval Index As Integer)As HDD'とコンパイル!これを回答として投稿してください。 :) – Tim

+0

Reckon Codyが努力してそれに値する。 –

答えて

2

VB.NETのインデックス付きプロパティstill existは、従来のCOMベースのVBと同様です。

構文が間違っています。インデックス付きプロパティは実際にはパラメータ化されたプロパティの特殊なケースなので、indexはプロパティ全体のパラメータであり、個々のGetおよびSetステートメントではありません。

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 
関連する問題