2017-05-05 35 views
0

你好,我有一個像下面的方法:傳遞許多不同類型的一種方法C#

public EventItemPage LaunchItemsActionByRowIndex(int RowIndex) 
    { 
     // does some other stuff 

     var eventItemPage = new EventItemPage(driver); 
     eventItemPage.WaitForPageToLoad(); 

     return eventItemPage; 
    } 

    public StandardSalesforcePage LaunchViewActionByRowIndex(int RowIndex, string actionItem) 
    { 
     // Does the same as above method 

     var bookDetailPage = new StandardSalesforcePage(driver); 
     bookDetailPage.WaitForPageToLoad(); 

     return bookDetailPage; 
    } 

我想這兩種方法將它們合併,並在傳遞類作爲參數,並移動到一個新的類,將被上面列出的類繼承。我需要訪問類的一些方法,並且還要確保構造函數被調用。我試圖使用下面的創建實例激活器,但不認爲我正確使用它。

object obj = (yourPage)Activator.CreateInstance(typeof(StringBuilder), yourPage); 

我一直在研究很多,但是如果可能或者不可能,我很困惑。上面我沒有提到,我們將一個selenium驅動實例傳遞給我們將要使用的類的構造函數。

+2

「將被上面列出的類繼承」 - 您沒有在任何地方列出任何類。 –

+2

也許這是一個解決方案,用你需要的對象類型作爲成員編寫一個小類。然後你可以用你需要的對象作爲參數發送你的類的一個實例給你的函數/方法 –

+0

你可以定義一個「通用方法」並注入所需的對象而不是用Activator創建它。 https://msdn.microsoft.com/en-us/library/twcad0zb.aspx – zanseb

回答

1

做你所要求的事情並不是不可能的,但你需要稍微修改你的課程的工作方式。

您不能強制對一類參數的構造函數,但你可以強制執行,它有一個構造:

public T LaunchFooByRowIndex<T>(int RowIndex, string actionItem = String.Empty) where T : IFoo, new() 
{ 
    // does some other stuff 

    T myObject = new T(); 
    myObject.LoadDriver(driver); 
    myObject.WaitForPageToLoad(); 

    return myObject; 
} 

注意,我做了可選的第二個參數,以便這兩個方法簽名兼容。

通過提及new(),確保您只能使用具有無參數構造函數的類(並且還實現IFoo)。處理泛型類型時,可以調用無參數構造函數(假設您需要它的存在)。

但是,你需要設置你的類如下:

public interface IFoo 
{ 
    void LoadDriver(Driver driver); 
    void WaitForPageToLoad(); 
} 

public class MyFooClass : IFoo 
{ 
    //parameterless constructor exists implicitly, 
    //UNLESS you have defined constructors with parameters. 
    //In that case, you need to explicitly make a parameterless constructor. 

    //and then you implement your interface methods here 
} 

附錄

還有其他的方法來做到這一點。

您可以使用繼承而不是接口。這允許您爲共享邏輯實現單個實現(例如,如果WaitForPageToLoad()對您的兩個類完全相同)。
但是,除非我錯了,那麼你就像我在我的例子中使用的乾淨的無參數構造函數失去了。

+0

謝謝我將試試這個 –

+0

你是搖滾明星,謝謝你的工作很棒。 –

+0

@NicolePhillips高興地幫助:) – Flater

相關問題