反思内部,过载和参数参数的方法

时间:2014-03-18 15:07:57

标签: .net reflection

如何使用.net v1.1获取对System.Web.Configuration.MachineKey.GetEncodedData方法的引用?

使用以下代码返回null:

Type t = typeof(System.Web.Configuration.HttpCapabilitiesBase)
    .Assembly
    .GetType("System.Web.Configuration.MachineKey");

MethodInfo method = t.GetMethod("GetEncodedData",
    BindingFlags.NonPublic | BindingFlags.Static, 
    null,
    new Type[] { typeof(byte[]), typeof(byte[]), typeof(int), typeof(int) },
    new ParameterModifier[0]
);

1 个答案:

答案 0 :(得分:1)

好的,所以听起来问题是.NET 1.1中没有等效的Type.MakeByRef

可以能够使用Type.GetType("System.Int32&")来获取:

MethodInfo method = t.GetMethod("GetEncodedData",
    BindingFlags.NonPublic | BindingFlags.Static, 
    null,
    new Type[] { typeof(byte[]), typeof(byte[]),
                 typeof(int), Type.GetType("System.Int32&" },
    new ParameterModifier[0]
);

或者,您始终可以使用GetMethods参数创建自己的方法(例如,您只能使用ref int找到),并使用 < / em>参数类型。 Icky,但是......

当然,所有这一切都让人觉得非常脆弱。我假设你有一个非常好的理由想要在一个非常过时的框架版本上调用内部方法......