나는 반사 문제에 갇혀있어, 나는 그것이 진짜 큰 것은 아니라고 생각하지만, 이것에 대한 해결책을 찾지 못한다.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 메소드를 호출하는 경우를 ("...") - 방법, 난 항상 NullReference을 얻었다. 나는이 프로젝트의 다른 부분에서 전에 이것을 해 봤기 때문에 이것을 이해할 수 없다. 그러나 Refelction을 "This"가 아닌 다른 Type으로 사용했습니다.
실제로 인스턴스화 된 객체에서 메소드를 리플렉션 할 수 있습니까? 나는해야한다고 생각하지만, 어떻게해야할지 모르겠다. ...
많은 감사! Benni
어떻게'DecideAndCall'를 호출 자세히 설명되어 있습니다 과부하가 BindingFlags의
이를 복용 사용할 필요가? 당신은 확실히 "A"또는 "B"를 통과하고 있습니까? 메서드가 발견되지 않으면 GetMethod는 ArgumentNullException을 던집니다. 또는 문을 여러 단계로 나누어 Null 참조를 던지는 부분을 찾아야합니다. – Lazarus
다음과 같이 코드를 실행할 때 null 참조 예외가 발생하지 않습니다.'var instance = new myClass(); instance.DecideAndCall ("A"); 그리고''A ''를 예를 들어. ''C '''또는''null''. 예외를 재생산하는 새로운 프로젝트를 만드시겠습니까? –
이 질문에 대한 대답은 아니지만 각 클래스의 제공된 식별자를 기반으로 전환하는 것이 더 낫지는 않을 것입니다. 리플렉션을 사용하면 단순한 스위치와 비교할 때 매우 느릴 것입니다. 코드 작성이 빠르지 않을 수도 있습니다. – Hawxby