我有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