2014-09-22 138 views
0

我在RunWebTest方法中有以下循環,它可以使用傳遞給它的不同類型的類。現在的問題是,我不知道如何修改這個代碼,所以我可以傳遞不同的參數類型到類的構造函數:構造函數中的遺傳參數

Public Class TestManager 
    Inherits ThreadedWebTest 
    Public Property ServerURL As String 

    Public Overrides Sub Run() 
     RunWebTest(New Login(Users.CustomerTradeAdvanced)) 
     RunWebTest(New CustomerCreate) 
     RunWebTest(New Logout) 
    End Sub 

    Private Sub RunWebTest(Of WebTestType)(test As WebTestType) 
     For Each r As WebTestRequest In IncludeWebTest(GetType(WebTestType).GetConstructor(New System.Type() {}).Invoke(New Object() {}), False) 
      MyBase.Send(r) 
     Next 
    End Sub 
End Class 

我會感激你的幫助

+0

您應該創建2個具有不同簽名的構造函數'New()',一個具有默認設置,另一個具有您的參數。 – 2014-09-22 06:58:30

+0

@Nadeem_MK我沒有定義兩個或更多不同的構造函數的問題。我不知道如何調整RunWebTest方法來接受這兩種情況。 – Afflatus 2014-09-22 07:05:39

回答

0

關鍵是要使用基類作爲方法的參數。此代碼現在可用:

Public Overrides Sub Run() 
     RunWebTestRequests(New Login(Users.CustomerTradeAdvanced)) 
     RunWebTestRequests(New CustomerCreate) 
     RunWebTestRequests(New SalesInvoice) 
     RunWebTestRequests(New Logout) 
    End Sub 

    Private Sub RunWebTestRequests(webTest As ThreadedWebTest) 
     For Each r As WebTestRequest In IncludeWebTest(webTest, False) 
      MyBase.Send(r) 
     Next 
    End Sub 
0

這可能助陣。我嘗試了泛型,他們並沒有像這樣一起走到一起。你可以進入你的方法你期望基於什麼樣的新構造你打,然後從那裏更改類型是什麼類型,見下圖:

Private Class TestTypeClass 

    Private Sub New(str As String) 
     str = "hi" 
     str = TryCast(str, Object) 

     Dim myType As String = "string" 

     RunWebTest(str, myType) 
    End Sub 
    Public Sub New(int As Integer) 
     int = 99 
     int = TryCast(int, Object) 

     Dim myType As String = "integer" 

     RunWebTest(int, myType) 
    End Sub 

    Private Sub RunWebTest(myThing As Object, myType As String) 

     Select Case myType 
      Case "string" 
       myThing = DirectCast(myThing, String) 
       'Do string logic here, or call method from here doing string logic. 
      Case "integer" 
       myThing = DirectCast(myThing, Integer) 
       'Do integer logic here, or call method from here doing integer logic. 
     End Select 

    End Sub 

End Class 
+0

這看起來像工廠方法莫名其妙。但我的問題是,當我嘗試將其轉換爲我的類類型時,directCast拋出一個錯誤。 – Afflatus 2014-09-24 03:26:27

1

目前還不清楚是什麼你正在嘗試做的,但你應該能夠讓你的類變得通用。你所有的課程都以某種方式相關嗎?它們是從相同的基類繼承還是實現相同的接口?

Public Class TestManager(Of T) 
    Inherits ThreadedWebTest 

    Public Property ServerURL As String 

    Public Overrides Sub Run() 
     RunWebTest(New T()) 
    End Sub 

    Private Sub RunWebTest(Of T)(test As T) 
     'code here 
    End Sub 
End Class 
+0

謝謝!我明白了。 :) – Afflatus 2014-09-24 03:28:00