【发布时间】:2011-03-29 21:12:20
【问题描述】:
我有 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,但是方法通过反射返回后结果就不一样了。
我做错了吗?有什么我想念的吗?我可以清楚地看到方法内部的值是 true,但在调用站点上,它的显示方式不同。
【问题讨论】:
-
能否提供 Blend() 方法的代码?
-
也许添加一些更完整的代码。我仍然看不到您如何在静态方法中获得
this。 -
我添加了 Blend 的代码,现在就是这样,因为我正在像这样调试它。 Type.GetMethods 和 method.Invoke,它们在 Effect 实例类中,通过反射调用 Blend 方法。
-
您的变量成功的范围是静态方法,而不是在您的 EffectMethods 类中声明为静态成员,对吗?您是否在静态方法中使用任何 lambda 表达式?
-
@Joel,这是正确的,没有 lambda。它实际上是设置一些值,例如成功并创建一个 EffectResult 实例。
标签: c# .net reflection