因此,我通過調用列表的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基類以上不一定是相同的,包括頂層類。
我不能改變任何代碼,但我需要通過一個特定的類,最終無論從DomesticTestClass
或InternationalTestClass
導出到一個方法,然後決定具體的類添加到列表或不依賴於它的一種方式基類。
我已經嘗試只是讓一個正常的方法:
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()約束,並且在沒有重載的情況下仍然失敗。
有沒有另一種方法來做到這一點,或者它是不可能的?
好了的作品,但有什麼辦法可以將那些爲一個方法,因爲我不知道我傳遞的「T」類是否有基類DomesticTestClass或InternationalTestClass?我是否可以像上面所說的那樣重載它,或者我應該只使用這兩者的基類,並在其中放入if語句? – jjumboshrimp
@jjumboshrimp看我的編輯。 – Romoku
這就是一些神奇的東西,但它很好用,謝謝! – jjumboshrimp