没有人在Difference between Activator.CreateInstance() and typeof(T).InvokeMember() with BindingFlags.CreateInstance回答我的问题。我猜这个问题已经结束了,我再次在这里问。
Ben M有一个很好的功能,我需要一个项目。功能是 -
public static T CreateInstance<T>()
{
bool bNeedSecurityCheck = true;
bool canBeCached = false;
RuntimeMethodHandle emptyHandle = RuntimeMethodHandle.EmptyHandle;
return (T) RuntimeTypeHandle.CreateInstance(typeof(T) as RuntimeType, true, true, ref canBeCached, ref emptyHandle, ref bNeedSecurityCheck);
}
我使用的是.NET 3.5和Visual Studio 2008.它给出了错误“System.RuntimeMethodHandle类型中不存在EmptyHandle类型名称。”
然后我用“RuntimeMethodHandle emptyHandle = new RuntimeMethodHandle();”。出现另一个错误。 RuntimeTypeHandle也没有CreateInstance方法。 Activator有。但它不需要任何ref参数。
感谢提前澄清!
答案 0 :(得分:4)
EmptyHandle
是RuntimeMethodHandle
上的内部静态属性。来自Reflector:
internal static RuntimeMethodHandle EmptyHandle {
get {
return new RuntimeMethodHandle(null);
}
}
幸运的是,您不必自己实现该方法 - 使用Activator.CreateInstance<T>
(Ben M的'nice function'只是该.NET类方法的反编译源代码)。
答案 1 :(得分:1)
我认为没有迹象表明它存在even in .NET 4 - 至少是公开的。
我怀疑它可能是一个内部属性,但如果是这种情况,你应该把它视为不存在。