考慮下面的代碼:與Activator.CreateInstance創建的對象的工作
void fun1(string typeName)
{
object adap = Activator.CreateInstance(typeName);
adap.dowork(); //won't compile because of strongly typed.
}
使用Activator.CreateInstance()
,我們可以輕鬆地創建任何類型的實例,但如果我們不知道在設計時的類型名稱,它不是可能會降低它的實際類型。
我的問題是,如果我們不能將它降爲合適的類型,我們怎麼能夠調用由Activator.CreateInstance
創建的實例的函數,因爲我們在設計時不知道類型名稱,但我們知道該函數存在。
我希望我已經說清楚了。
如果你不知道在編譯時的類型,你怎麼知道在它上面調用dowork()?這些類型之間是否有共同的接口? – 2013-04-22 17:51:46
通常這是通過接口完成的。你有一個抽象接口(作爲一個「合同」,不應該改變那麼多),你依賴於那個接口,但不是一個特定的實現。然後您可以通過界面獲得實現的成員。 – 2013-04-22 17:59:24
是的,你是完全正確的,這通常是通過接口或繼承來完成的,但我不能在我的情況下使用它們,因爲我不是創建其對象需要創建的「類型」的人。 – 2013-04-22 18:04:56