2015-07-12 61 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将执行此操作。