2010-08-13 160 views
0

我有一個面向對象的數據庫的方法,它根據它們的類型創建表。傳遞一個類型列表,將類型限制爲從一個特定父類派生的類,在c#中

我想能夠發送一個類型列表來創建,但我希望將它們限制爲僅從特定基類(MyBase)派生的類。

有沒有辦法可以在方法簽名中要求這個? 而不是

CreateTables(IList<Type> tables) 

我可以做的東西,將

CreateTables(IList<TypeWithBaseTypeMyBase> tables) 

我知道我可以檢查基類送過來每種類型的,但如果可能的話,我想這在編譯時驗證。

有什麼建議嗎?

回答

0

你試過嗎?

CreateTables(IList<MyBase> tables) 

我想這就是你所要做的。

1

你可以做到以下幾點:

CreateTables(IList<MyBase> tables) 
{ 
    // GetType will still return the original (child) type. 
    foreach(var item in tables) 
    { 
     var thisType = item.GetType(); 
     // continue processing 
    } 
} 
0

爲什麼不只是改變簽名:

CreateTables(IList<BaseType> tables) 
+0

有主叫方不要求有實例的類。爲了使用該類型而實例化它似乎很浪費。 – rediVider 2010-08-13 21:04:33

+0

我不知道我明白。如果您將IList 傳遞給某個方法,那麼我假設該列表的元素將實例化SomeType的類。我只是說,只要所有派生類型都繼承自它,就可以使用BaseType作爲IList的類型。 – dcp 2010-08-13 22:01:40

+0

我沒有得到對象列表。我收到了一個類型列表。 – rediVider 2010-10-07 23:57:45

相關問題