我有2种称为Effect
和EffectMethods
这是静态类我打电话的方法:使用反射调用静态方法时出现错误的返回值?
public class EffectMethods
{
public static EffectResult Blend (Effect effect)
{
bool success = true;
return new EffectResult (effect.Type, success);
}
}
我发现使用正确的方法:
Type.GetMethods (BindingFlags.Public | BindingFlags.Static);
,并筛选出正确的。
但是,当我把它叫做:
(EffectResult) method.Invoke (null, new object [ ] { this });
public class Effect
{
public EffectResult Apply()
{
var methods = Type.GetMethods (BindingFlags.Public | BindingFlags.Static);
var method = methods.First (...);
// This result value is now different (success = false)
return (EffectResult) method.Invoke (null, new object [ ] { this });
}
}
我得到错误的结果。这里this
是Effect
的当前实例,因为它是包含反射调用的类型。
基本上我计算的一个值是一个标志,返回操作是否成功。但是这个值在代码中被设置为true,但是在方法通过反射返回后,结果是不同的。
我这样做不对吗?有什么我失踪?我可以清楚地看到该方法中的值是真实的,但在呼叫站点上,它显示的方式不同。
你能提供Blend()方法的代码吗? – Adi 2011-03-29 21:17:48
也许添加一些更完整的代码。我仍然没有看到你如何在静态方法中得到'this'。 – 2011-03-29 21:19:21
我添加了Blend的代码,这就是它现在的样子,因为我正在像这样调试它。 Type.GetMethods和method.Invoke,它们在Effect实例类中,通过反射调用Blend方法。 – 2011-03-29 21:21:40