当前位置:  开发笔记 > 编程语言 > 正文

通用Func <T>的运行时创建

如何解决《通用Func<T>的运行时创建》经验,为你挑选了1个好方法。

我需要实现这个方法:

object GetFactory(Type type);

此方法需要返回一个Func ,其中typeparam'T'是'type'.

所以,我的问题是我不知道如何使用反射在运行时创建Func <?>.Activator.CreateInstance不起作用,因为委托上没有构造函数.

有任何想法吗?



1> Marc Gravell..:

你使用Delegate.CreateDelegate,即来自MethodInfo; 下面,我已经硬编码,但你会使用一些逻辑,或者Expression,获得实际的创建方法:

using System;
using System.Reflection;
class Foo {}

static class Program
{
    static Func GetFactory()
    {
        return (Func)GetFactory(typeof(T));
    }
    static object GetFactory(Type type)
    {
        Type funcType = typeof(Func<>).MakeGenericType(type);
        MethodInfo method = typeof(Program).GetMethod("CreateFoo",
            BindingFlags.NonPublic | BindingFlags.Static);
        return Delegate.CreateDelegate(funcType, method);
    }
    static Foo CreateFoo() { return new Foo(); }
    static void Main()
    {
        Func factory = GetFactory();
        Foo foo = factory();
    }
}

对于非静态方法,有一个Delegate.CreateDelegate接受目标实例的重载.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有