什么版本的.NET包含RuntimeMethodHandle.EmptyHandle?

时间:2010-03-24 13:59:39

标签: c# .net c#-3.0

没有人在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参数。

感谢提前澄清!

2 个答案:

答案 0 :(得分:4)

EmptyHandleRuntimeMethodHandle上的内部静态属性。来自Reflector:

internal static RuntimeMethodHandle EmptyHandle {
    get {
        return new RuntimeMethodHandle(null);
    }
}

幸运的是,您不必自己实现该方法 - 使用Activator.CreateInstance<T>(Ben M的'nice function'只是该.NET类方法的反编译源代码)。

答案 1 :(得分:1)

我认为没有迹象表明它存在even in .NET 4 - 至少是公开的。

我怀疑它可能是一个内部属性,但如果是这种情况,你应该把它视为不存在。