我想做一些我以前在Java中做過的事情,但需要在C#中使用。創建數組類對象
Java中的代碼,那些將類似於:
public Class<? extends Thing>[] classes = new Class<? extends Thing>[3] {
OneThing.class,
AnotherThing.class
YetAnotherThing.class
// etc.
}
這是可能在C#中以任何方式?最終我想要做的是有一個代表項目類型的類的數組。然後這個數組用於檢查項目的類型以產生一個布爾值,表示該項目是否具有數組中索引的超類。爲了澄清,我正在檢查,看看是否類Thing
的實例也是OneThing
,AnotherThing
實例等
重要的是,我試圖創建一個數組不是一個常規對象像Random
,但無論C#的類對應的是Java Class
類。
如果我正確記住我的Java(並且我可能不會),那麼您試圖聲明一個_type_實例的數組,其中每個類型都繼承基類型「Thing」。正確?如果是這樣,那麼我不認爲C#的通用約束系統允許這樣做。即它可以基於它實際繼承的類型來約束一個類型,但是它不能約束'Type'的_instance_來完成相同的操作。你必須實現一些在運行時強制執行的東西。 – 2014-11-05 02:01:08
@PeterDuniho我想要做的是創建一個類的數組,其中每個類是「事」的孩子。我正在檢查對象的實際類(它在很大程度上是「Thing」)是否也是由傳遞給函數的索引指定的類的子類(未顯示)。 – Treyzania 2014-11-05 02:06:56
好吧,所以我的確理解正確。在這種情況下,我認爲最接近的是一個帶有「where T:Type」約束的自定義包裝類,然後在內部強制約束T是一個Type類型實例,該實例表示繼承「Thing」的實際類型。我會舉一個例子作爲答案,但我不想阻止C#泛型專家的參與。如果沒有其他人,我會很樂意在12-24小時內做到這一點。 – 2014-11-05 02:12:50