2016-11-20 6 views
0

私は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 
+0

どのコレクションプロパティを使用して、どのコレクションプロパティを使用するかを知りたいと思っていますか? –

+1

私はあなたのようなフラグを設定する以外は、どのコンストラクタが使われたのかを知る方法はないと思います。 '_boolIsList'フラグの代わりに' If LstFileList IsNot Nothing Then'を使うことができると思います。しかし、 'fileList'には常に文字列が含まれていると仮定している場合は、' IEnumerable(Of String) 'などのコレクションを作成するコンストラクタを1つだけ持つことができますか? – Mark

+0

もちろん、このような方法でオブジェクトを設計することは、常に悪い考えです。これにより、単一責任の原則が破たれます。 'List 'で何らかのアクションを行うクラスを作成し、 'ListView'と' ListBox'にいくつかの拡張メソッドを作成することをお勧めします。その後、単にlstBox.MySendExtension()を呼び出してください。anf 'lstview.MySendExtension() –

答えて

0

私は長年VBを行っていませんが、入力されていないフィールドを確認するだけです。パラメータがNothingに設定されている場合は、コンストラクタでArgumentNullExceptionをスローすることをお勧めします。さもなければあなたのクラスはあなたが意図した通りに動作しないかもしれません。

Imports System.Threading 

Public Class ExtendedFileSender 
    Public LstFileList As List(Of String) 
    Public LvwFileList As ListBox.ObjectCollection 
    Public ExTcpClient As ExtendedTcpClient 

    Public Sub New(client As ExtendedTcpClient, data As List(Of String)) 
     ExTcpClient = client 
     LstFileList = data 
    End Sub 

    Public Sub New(client As ExtendedTcpClient, data As ListBox.ObjectCollection) 
     ExTcpClient = client 
     LvwFileList = data 
    End Sub 

    Public Sub StartSend() 
     If LstFileList IsNot Nothing 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 
+2

あなたのコメントを考慮してください。私は何年も前にVBを行っていませんでした。(これは批判ではありません)。 <>の代わりにIsNotと思ってください。 <>はString、Integer、Booleanなどを比較し、IsNotはList(Of T)などのクラスを比較することになります。 – Bugs

+1

私は曖昧な記憶を持ち、使用する別の演算子がある。 –

関連する問題