2010-03-24 54 views
0

没有人在Difference between Activator.CreateInstance() and typeof(T).InvokeMember() with BindingFlags.CreateInstance回答我的问题。我想这个问题是关闭的,我在这里再问一次。什么版本的.NET包含RuntimeMethodHandle.EmptyHandle?

本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。它给人的错误“EmptyHandle类型名称并不在类型System.RuntimeMethodHandle存在”。

然后我用“RuntimeMethodHandle emptyHandle = new RuntimeMethodHandle();”。另一个错误呈现。 RuntimeTypeHandle也没有CreateInstance方法。激活者有。但它不需要任何参数。

感谢您提前澄清!

+2

您不应该通过向另一个问题添加*答案*来问*问题*。写一个新问题(正如你在这里所做的)是正确的方法。 – 2010-03-24 14:10:04

回答

4

EmptyHandleRuntimeMethodHandle的内部静态属性。从反射:

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

幸运的是,你不必自己实现方法 - 使用Activator.CreateInstance<T>(本·M的“好功能”只是针对.NET类方法的反编译源代码)。

+0

财产,而不是方法 - 但否则,是的:) – 2010-03-24 14:13:40

+0

“获取存取方法”? ;)(D'oh) – 2010-03-24 14:44:56

1

我没有看到它存在的迹象even in .NET 4 - 至少是公开的。

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

相关问题