2015-07-12 55 views
0

我需要做的是這樣的事情,但真的不明白如何。按類型C設置對象#

Object value = new typeof(i.FieldType.GetType()); 

值的類型可以是任何東西,它只是繼承一個類(例如,BaseClass)。該類型將從(.Net)System.Reflections中讀取。但我不知道如何創建一個新的對象。

如何創建一個新的()對象(構造函數),對象存儲爲對象,其中的類型如果System.Reflections已知?

+2

這聽起來像是我需要一個工廠方法。見https://en.wikipedia.org/wiki/Factory_method_pattern –

+0

我想這可能會有所幫助:http://stackoverflow.com/questions/6472980/how-to-instantiate-the-class-in-an-assembly-using - 與c-net的反射? –

+0

除非你正在寫一些專門的東西,否則一個通用的應用程序不需要反射。按照@Robert的建議使用基類,接口或者工廠,你應該沒問題。解釋你以後如何使用這些代碼。 – CodeCaster

回答

1

您可以使用ConstructorInfo類

var constructorInfo = typeof(myclasstype).GetConstructor(); 
if (constructorInfo != null) 
{ 
    var myclass = constructorInfo.Invoke(); 
} 
+0

這可能是很難做到的。見奧利弗在問題下面的評論。 –

1

你真的需要在所有的構造類型?如果你想動態地將字符串轉換爲類型(根據你的評論之一),那麼你所需要的只是System.Convert.ChangeType方法。

object convertedValue = Convert.ChangeType(stringValue, i.FieldType.GetType()); 

當第二參數ChangeTypeSystem.Type


Activator實際上只是需要,如果你想創建新的(空)動態對象。如果您所說的字段類型是標準類型,如string,intbool,則Convert.ChangeType將執行此操作。