jok*_*der 2 c# reflection dynamic
我有一个抽象类A和实现B和C.我还有一个存储A对象信息的数据库.该表有一个名为"Name"的列,用于确定是否应使用数据构造B或C.
public abstract class A { }
public class B,C : A
{
public B,C(TableData data)
{
//Do Stuff.
}
}
public class TableData
{
string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,如果Name是"Banana",我希望这个创建一个B的实例; 如果它是"Carrot"我希望这个创建一个C的实例:
A myObj = { Reflection? }
Run Code Online (Sandbox Code Playgroud)
反射以某种方式使用B或C构造函数并将此新创建的对象分配给myObj.我已经研究过使用反射,但是那里允许使用非默认构造函数的大多数方法都非常复杂,并且采用我以前从未使用过的参数:
http://msdn.microsoft.com/en-us/library/System.Activator.CreateInstance(v=vs.110).aspx http://msdn.microsoft.com/en-us/library/dd384354.aspx
有一个更好的方法吗?如果没有,我如何使用第二个链接动态分配此类型?
如果有一些方法可以简单地这样做:
CreateInstance("Namespace.Type", [ ConstructorParam1, ConstructorParam2, ... ])
Run Code Online (Sandbox Code Playgroud)
这就是我所需要的一切.
如果你期望有一个参数需要a TableData,那么这只是:
Type type = Type.GetType(qualifiedName);
TableData tableData = ...
A obj = (A)Activator.CreateInstance(type, tableData);
Run Code Online (Sandbox Code Playgroud)
注意到qualifiedName应包括装配信息; 如果没有,你会想要先解决 - 也许:
Type type = typeof(A).Assembly.GetType(fullName);
Run Code Online (Sandbox Code Playgroud)
其中B/ C等是在相同的组件A,并且其中fullName是"Namespace.B"或类似的.