繁体   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