我处于一种情况下,我想实例化一个将在运行时确定的类型的对象。我还需要执行对该类型的显式转换。
像这样:
static void castTest(myEnum val) { //Call a native function that returns a pointer to a structure IntPtr = someNativeFunction(..params..); //determine the type of the structure based on the enum value Type structType = getTypeFromEnum(val); structType myStruct = (structType)Marshal.PtrToStructure(IntPtr, structType); }
这显然不是有效的代码,但我希望它传达了我正在尝试做的本质。我实际上正在使用的方法将必须在约35种不同类型上执行封送处理操作。我还有其他几种方法需要对同一组类型执行类似的操作。因此,我想从这些方法中分离出类型确定逻辑,这样我只需要编写一次即可,从而使方法保持清晰易读。
我必须承认自己是设计的新手。谁能建议一个解决这个问题的好方法?我怀疑可能有一个我不知道的合适的设计模式。
您可以通过多种方式即时创建某种类型的对象,一种是:
// determine type here var type = typeof(MyClass); // create an object of the type var obj = (MyClass)Activator.CreateInstance(type);
然后您将在obj中获得MyClass的实例。
另一种方法是使用反射:
// get type information var type = typeof(MyClass); // get public constructors var ctors = type.GetConstructors(BindingFlags.Public); // invoke the first public constructor with no parameters. var obj = ctors[0].Invoke(new object[] { });
从返回的ConstructorInfo之一中,您可以使用参数对其进行“ Invoke()”,并获得该类的实例,就好像您使用的是“ new”运算符一样。