[英]Working with objects created with Activator.CreateInstance
請考慮以下代碼:
void fun1(string typeName)
{
object adap = Activator.CreateInstance(typeName);
adap.dowork(); //won't compile because of strongly typed.
}
使用Activator.CreateInstance()
我們可以輕松創建任何類型的實例,但如果我們在設計時不知道typename,則無法將其轉換為實際類型。
我的問題是,如果我們不能將它轉發到適當的類型,我們如何調用Activator.CreateInstance
創建的實例的函數,因為我們在設計時不知道typename,但我們知道該函數存在。
我希望我已經說清楚了。
您可以做的一件事是將其分配給dynamic
類型。
dynamic adap = Activator.CreateInstance(typeName);
adap.dowork(); //this now compiles
如果您知道方法名稱,也可以使用反射動態調用方法。
最好的選擇是知道一些常見的接口或基類,並轉換為。 但是,如果不可能,您可以使用鴨子類型
dynamic adap = ...
而你的其余代碼就是這樣。
如果那是不可能的(錯誤的.net版本等),那么你將不得不使用反射。
如果您知道typeName
具有doWork
方法,那么您的類型實現如下界面會更好:
interface IDoWorkSupport
{
void DorWork();
}
然后你可以使你的代碼像:
var adap = (IDoWorkSupport) Activator.CreateInstance(typeName);
adap.DoWork(); //this now compiles
在這種情況下,它是一個更面向對象的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.