簡體   English   中英

C#對此對象的反思

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM