使用反射/泛型生成包装类

时间:2016-08-18 15:46:43

标签: c# reflection

我想动态创建一个包装类,这样对于每个所需的类(可能在DBO之类的某个命名空间下面),我会得到一个合适的类:

public class [ClassName]Wrapper{
    public [ClassName] [ClassName] { get; set; }
}

其次,我需要基于包装器与原始类型。我假设我可以做类似的事情:

(classBob as Type).ToString().EndsWith("Wrapper")

如果我需要更多,请帮助我:)。

我对反射很新,我从未在运行时构建过类。执行此操作的代码会很棒,但即使指出了很好的资源来研究用于执行此操作的工具,对我来说也是一个很好的进展。

谢谢!

1 个答案:

答案 0 :(得分:2)

不会使用泛型来解决你的问题吗?

public class Wrapper<T>
    where T : class
{
    public Wrapper(T wrappee)
    {
        Class = wrappee;
    }

    public T Class { get; } // C# 6.0 Syntax, otherwise add "private set;"
} 

然后,您可以使用

在运行时创建包装器
Type typeToBeWrapped = objToBeWrapped.GetType();

Type genericWrapper = typeof(Wrapper<>);
Type constructedWrapper = genericWrapper.MakeGenericType(typeToBeWrapped);
object obj = Activator.CreateInstance(constructedWrapper, objToBeWrapped);