私はList(Of String)
またはListBox.ObjectCollection
からデータを送信できるクラスを作っています。どのようなコンストラクタが使用されているかはどうすれば分かりますか?これは私のコードです(私のコードではできますが、それは粗末な方法かもしれません)。どのようなNew()コンストラクタが使用されているかわかる
Imports System.Threading
Public Class ExtendedFileSender
Public LstFileList As List(Of String)
Public LvwFileList As ListBox.ObjectCollection
Public ExTcpClient As ExtendedTcpClient
Private ReadOnly _boolIsList As Boolean
Public Sub New(client As ExtendedTcpClient, data As List(Of String))
ExTcpClient = client
LstFileList = data
_boolIsList = True
End Sub
Public Sub New(client As ExtendedTcpClient, data As ListBox.ObjectCollection)
ExTcpClient = client
LvwFileList = data
_boolIsList = False
End Sub
Public Sub StartSend()
If _boolIsList = True Then
Dim senderThread = New Thread(AddressOf SendFileFromList)
senderThread.Start(LstFileList)
Else
Dim senderThread = New Thread(AddressOf SendFileFromListView)
senderThread.Start(LvwFileList)
End If
End Sub
Private Sub SendFileFromList(fileList As List(Of String))
For Each strFile In fileList
Debug.WriteLine(strFile)
Next
End Sub
Private Sub SendFileFromListView(fileList As ListBox.ObjectCollection)
For Each strFile In fileList
Debug.WriteLine(strFile)
Next
End Sub
End Class
どのコレクションプロパティを使用して、どのコレクションプロパティを使用するかを知りたいと思っていますか? –
私はあなたのようなフラグを設定する以外は、どのコンストラクタが使われたのかを知る方法はないと思います。 '_boolIsList'フラグの代わりに' If LstFileList IsNot Nothing Then'を使うことができると思います。しかし、 'fileList'には常に文字列が含まれていると仮定している場合は、' IEnumerable(Of String) 'などのコレクションを作成するコンストラクタを1つだけ持つことができますか? – Mark
もちろん、このような方法でオブジェクトを設計することは、常に悪い考えです。これにより、単一責任の原則が破たれます。 'List'で何らかのアクションを行うクラスを作成し、 'ListView'と' ListBox'にいくつかの拡張メソッドを作成することをお勧めします。その後、単にlstBox.MySendExtension()を呼び出してください。anf 'lstview.MySendExtension() –