gpt4 book ai didi

C# 对此对象的反射(reflection)

转载 作者:行者123 更新时间:2023-11-30 18:54:08 25 4
gpt4 key购买 nike

我完全陷入了反射问题,我认为它并不大,但我没有找到任何解决方案。

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("...")-方法,我总是得到一个 NullReference。我无法理解这一点,因为在这个项目的其他部分我以前做过这个。但是我在那里使用了对另一种类型的反射而不是“这个”。

是否可以在实际实例化的对象中反射方法?我想我应该是,但我不知道如何...

非常感谢!本尼

最佳答案

您要检索的方法是私有(private)的,但无参数 Type.GetMethod方法只查找公共(public)方法。试试 overload允许您指定绑定(bind)约束:

BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
MethodInfo mi = GetType().GetMethod(methodName, flags);

不过,我强烈建议不要这样做。对象对自身 执行反射是非常不寻常的。你显然失去了类型安全;例如,如果方法的参数不是 "A""B",您提供的示例将失败。虽然我确定您的真实程序更复杂,但您确定您不能以不需要反射的方式重新设计它吗?

关于C# 对此对象的反射(reflection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4828229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com