[英]C# Reflection on this-Object
我完全陷入了反思問題,我認為這不是很大,但我沒有找到任何解決方案。
public class myClass : myClassIF {
public myClass() { }
private void doSomething_A() {
//...
}
private void doSomething_B() {
//...
}
public void DecideAndCall(string identifier) {
string methodName = "doSomething_" + identifier;
MethodInfo mi = this.GetType().GetMethod(methodName); //here i got a NullReference??
//here should be the Invocation of the Method and so on...
}
}
界面看起來像這樣:
public interface myClassIF {
void DecideAndCall(string identifier);
}
如果我調用GetMethod(“...”) - Method,我總是得到一個NullReference。 我無法理解這一點,因為在這個項目的另一部分我以前做過這個。 但是我在其他類型中使用Refelction而不是“this”。
是否有可能在實際的instanciated對象中反映方法? 我想我應該是,但我不知道怎么樣......
非常感謝! 奔奔
要檢索的方法是私有的,但無參數的Type.GetMethod
方法僅查找公共方法。 嘗試使用指定綁定約束的重載 :
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
MethodInfo mi = GetType().GetMethod(methodName, flags);
我強烈建議不要做這樣的事情。 對象對自身進行反射是非常不尋常的。 你顯然失去了類型安全; 例如,如果方法的參數不是"A"
或"B"
,那么您提供的樣本將會失敗。 雖然我確定你的真實程序更復雜,但你確定你不能以不需要反射的方式重新設計它嗎?
您感興趣的方法是私有的,因此您需要在參數中指定BindingFlags.NonPublic
:
public void DecideAndCall(string identifier)
{
string methodName = "doSomething_" + identifier;
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
MethodInfo mi = this.GetType().GetMethod(methodName, flags);
// ...
}
你需要使用BindingFlags.NonPublic來獲取私有方法。
由於這些方法是私有的,因此需要使用BindingFlags進行重載
MethodInfo mi = typeof(myClass).GetMethod(methodName, BindingFlags.Instance | BindingFlags.NonPublic);
這是更詳細的討論在這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.