2017-09-19 36 views
0

因此,我通過調用列表的add方法中的構造函數將類添加到類列表中:C#如何將類作爲參數傳遞給方法並確定參數類的基類

SupportedTests.Add(new SpecificTestClass27()); 

但是,我使用的類是派生類(大多數時候它們有一個4或5個基類鏈),我只想將它們添加到列表中,具體取決於它們使用的基類(不是直接基類,而是一對基類)

鏈接基類示例:

public class SpecificTestClass27 : SpecificTestClass27_base 

public abstract class SpecificTestClass27_base: OperationTestClass_base 

public abstract class OperationTestClass_base: DomesticTestClass 

OR

public abstract class OperationTestClass_base: InternationalTestClass 

兩個DomesticTestClas S和InternationalTestClass從相同的基類派生:TestClass,和不同類的那些2基類以上不一定是相同的,包括頂層類。

我不能改變任何代碼,但我需要通過一個特定的類,最終無論從DomesticTestClassInternationalTestClass導出到一個方法,然後決定具體的類添加到列表或不依賴於它的一種方式基類。

我已經嘗試只是讓一個正常的方法:

public void AddaTestClass(object SpecificTestClass) 
{ 
    if (base == DomesticTestClass) { SupportedTests.Add(new SpecificTestClass()); } 
} 

但它不喜歡的參數是一個類。 ,當我試圖用一個通用的帶過載:

public void AddaTestClass<<"SpecificTestClass">>() where SpecificTestClass : DomesticTestClass 
{ 
    SupportedTests.Add(new SpecificTestClass()); 
} 

public void AddaTestClass<<"SpecificTestClass">>() where SpecificTestClass : InternationalTestClass 
{ 

} 

注:我沒有在我的節目報價SpecificTestClass它只是不會在這裏顯示之間不帶引號的克拉

這不允許我調用該類的構造函數,因爲它沒有new()約束,並且在沒有重載的情況下仍然失敗。

有沒有另一種方法來做到這一點,或者它是不可能的?

回答

0

由於您正在創建一個新類以將其添加到集合中,因此需要將new constraint添加到泛型類型參數中,以告知編譯器有一個有保證的公共無參數構造函數。

public void AddADomesticTestClass<T>() where T: DomesticTestClass, new() 
{ 
    SupportedTests.Add(new T()); 
} 

public void AddAnInternationalTestClass<T>() where T: InternationalTestClass, new() 
{ 
    SupportedTests.Add(new T()); 
} 

或者

public void AddATestClass<T>() where T: TestClass, new() 
{ 
    if (typeof(T).IsAssignableFrom(typeof(DomesticTestClass)) 
     || typeof(T).IsAssignableFrom(typeof(InternationalTestClass))) 
    { 
     SupportedTests.Add(new T()); 
    } 
} 
+0

好了的作品,但有什麼辦法可以將那些爲一個方法,因爲我不知道我傳遞的「T」類是否有基類DomesticTestClass或InternationalTestClass?我是否可以像上面所說的那樣重載它,或者我應該只使用這兩者的基類,並在其中放入if語句? – jjumboshrimp

+0

@jjumboshrimp看我的編輯。 – Romoku

+0

這就是一些神奇的東西,但它很好用,謝謝! – jjumboshrimp

相關問題