2012-04-22 77 views
2

我弄不明白,爲什麼我收到異常有關此行的方法:反射找不到這是實現

public void DoIt(object sender, MyEventArgs e) { 
//... other stuff 
Type type = sender.GetType(); 
if (type.GetMethod(e.ActionName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance) == null) 
    throw new NotSupportedException("Method: " + e.ActionName + " not implemented"); 
type.InvokeMember(e.ActionName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Instance, null, sender, e.Parameters.ToArray()); 

} 

我仍然得到關於方法的錯誤沒有找到,但我確定這是因爲調用之前if語句中的條件爲false。

+0

你試過調試過嗎?一種方法是設置一個'for'循環來迭代'GetMethods(bindingFlags)'返回的所有內容。 – dasblinkenlight 2012-04-22 11:47:24

+0

什麼方法?它*絕對*非公開?一個簡短但完整的例子會有所幫助。另外,將'GetMethod'的返回值存儲到一個變量中並調用該變量會更明智,而不是使用'Type.InvokeMember'來重新找到該方法。 – 2012-04-22 11:53:35

+0

是的,這絕對是私人的。關於GetMethod(..)。Invoke() - 我得到Access Exception(它是windows phone app) – TrN 2012-04-22 12:06:40

回答

1

其實,這是一個security feature。我以前在Silverlight中遇到過這種情況 - 只是不能在上反映該平臺上的私有類成員。由於Windows Phone與Silverlight非常相似,我相當確定在這裏也有相同的限制。