2012-08-02 5 views
1

나는 (내가 할 수 없다는) 해답을 알고 있다고 확신하지만 뭔가를 놓쳤는 지 알고 싶었다.리플렉션을 사용하여 메소드의 리턴 유형을 결정 하시겠습니까?

나는 수업이있는 경우 :

public class Foo 
{ 
} 

public class Bar : Foo 
{ 
} 

및 방법 :

public Foo DoSomething() 
{ 
    return new Bar(); 
} 

내가 해봐요의 '진정한'반환 형식은 실행하지 않고 무엇인지 알 수있는 방법이 없다고 주장에 정정 오전 방법?, 의미, 만약 내가 이렇게하면 :

MethodInfo mi = this.GetType().GetMethod("DoSomething", BindingFlags.Public | BindingFlags.Instance); 
//at this point, mi.ReturnType will be of type "Foo". 

DoSometh를 실제로 알 수있는 방법이 없습니다. 실제로 법을 실행하지 않고 바를 반환하고 내가 가져온 물건을 조사하면 맞습니까?

답변

1

정확합니다. 코드를 실행하지 않고 실제 반환 유형을 알 수있는 방법은 없습니다. 실제 반환 유형은 런타임에만 알려져 있고 실행마다 다를 수 있습니다 (예 : 메소드에 전달 된 매개 변수에 따라 또는 다른 메소드의 반환 값).

+0

네, 그게 제가 확신했던 것입니다. 단지 내가 알고 있지 않은 약간의 마법 같은 것들이 없었는지 확인하고 싶었습니다. : D – Jonas

0

정확함.

DoSomething 메서드의 요점은 특정 파생 형식을 반환하고 일반적인 용도로 Foo로 사용할 수 있다고 가정합니다.

그런 경우에는 반환 할 파생 형식을 아는 것이 이점이 무엇인지 모르겠지만 아마도 사용자 질문이 아닙니다. :)

+0

이것은 단순한 사례입니다. 실제 사례에서 우리는 MVC ActionResult 및 해당 클래스에서 파생 된 유형을 반환합니다. :디 – Jonas

관련 문제