动态方法创建

时间:2010-04-27 17:36:56

标签: c# reflection dynamic

所以,我整个上午一直试图研究这个问题,并且没有运气。我试图找到一种方法来动态创建一个方法/委托/ lambda,它返回从某个基类继承的某个类的新实例(直到运行时才知道)。

我可以保证关于未知/动态类

的以下内容
  1. 它将始终从一个已知的类(行)继承
  2. 它将至少有2个构造函数(一个接受一个long,一个接受一个I​​DataRecord)
  3. 我计划做以下事情:

    1. 查找具有特定属性的所有类
    2. 创建委托/方法/ lambda /创建类的新实例的任何内容
    3. 将委托/任何内容与某些属性一起存储在struct / class
    4. 将结构插入哈希表
    5. 需要时,从哈希表中提取信息并调用委托/任何内容以获取该类的新实例并将其返回/添加到列表/等。
    6. 我只需要上面的#2帮助!!!我不知道从哪里开始。我真的只需要一些参考资料来帮助我入门,或者将一些关键字投入谷歌。

      这是为我们办公室提供紧凑/简单的ORM。我理解上面的内容并不简单,但一旦工作,应该使代码维护变得异常简单。

      如果您需要更多信息,请告诉我们!并提前感谢! :)

2 个答案:

答案 0 :(得分:4)

您可以使用 LINQ表达式在运行时构造lambda (long p) => new XXX(p) as Row

Type type = // ...
ConstructorInfo ctor = type.GetConstructor(new Type[] { typeof(long) });

var p = Expression.Parameter(typeof(long), "p");
var expr = Expression.Lambda<Func<long, Row>>(
               Expression.TypeAs(
                   Expression.New(ctor, p),
                   typeof(Row)),
               p);

Func<long, Row> rowCreator = expr.Compile();

Row row = rowCreator(10);

答案 1 :(得分:3)

Activator.CreateInstance怎么办?

样品:

string typeName = ...;
Activator.CreateInstance(Type.GetType(typeName), params);