[英]How to pass method result as parameter to base class constructor in C#?
[英]C# how to pass a class as a parameter into a method and determining the base class of the parameter class
所以我一直在通過在列表的add方法中調用構造函數來將類添加到類列表中:
SupportedTests.Add(new SpecificTestClass27());
但是,我正在使用的類是派生類(大多數情況下,它們具有4或5個基類鏈),我只想根據它們使用的基類將它們添加到列表中(而不是直接基類)課,但有幾個基礎課)
鏈接基類的示例:
public class SpecificTestClass27 : SpecificTestClass27_base
public abstract class SpecificTestClass27_base: OperationTestClass_base
public abstract class OperationTestClass_base: DomesticTestClass
要么
public abstract class OperationTestClass_base: InternationalTestClass
DomesticTestClas
和InternationalTestClass
都源自相同的基類: TestClass
,而這兩個基類之上的不同類不一定相同,包括頂級類。
我無法更改任何代碼,但是我需要一種方法,該方法將最終從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()約束,並且在沒有重載的情況下仍然失敗。
還有另一種方法可以做到嗎?
由於您正在創建一個新類以將其添加到集合中,因此需要將一個new
約束添加到通用類型參數中,以告訴編譯器有一個保證的公共無參數構造函數。
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());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.