리플렉션을 사용할 때 System.Diagnostics.StackTrace를 사용하여 호출 스택을 얻을 수 있습니다 (JIT 최적화로 인해 근사치가 될 수 있음). 포함 된 StackFrame 개체를 검사합니다.스택 프레임에 대해 실행 개체를 얻으려면 어떻게해야합니까?
스택 프레임의 메소드가 실행되고있는 객체 (this-pointer)에 대한 참조를 어떻게 얻을 수 있습니까?
GetMethod() 스택 프레임 개체를 호출하여 MethodBase 가져올 수 있지만 GetObject() (메서드를 정적으로 경우 null 자연스럽게 반환됩니다 찾고 무엇을 찾고 있어요). 스택 프레임 객체는 메서드 정보, 원본 파일 등과 같이 정적으로 결정된 정보에 대해서만 쿼리 할 수있는 것처럼 보입니다.
VS 디버거는 (호출 스택 추적을 얻는 다른 방법을 사용하지만) 호출 스택 창에서 스택 프레임을 두 번 클릭하고 지역 및 클래스 필드의 값을 확인합니다.
편집 : 명확히하기 위해 : 나는 메소드가 호출 된 된 객체 인스턴스를 원한다. I : 메소드 Foo()가 호출 스택의 어딘가에있는 객체 인스턴스 A에서 호출되고 스택 추적을 수행하는 메소드에 계단식으로 연결되면 스택 추적을 수행하는 곳에서 A에 대한 참조를 얻고 싶습니다. (메서드 기반의 선언 형식이 아님)
이 포인터가 존재하지 않는 GetObject()가 정적 메서드 인 경우 null을 반환하고 인스턴스 메서드에서 표준 'this'포인터의 복사본을 반환하는 이유는 호출자가 호출 스택에서 호출하는 메서드입니다. 그러나 # 1 인수에 동의합니다. 단, 디자인에 따라 적절한 권한을 요구하여 개체에 대한 액세스를 쉽게 제한 할 수 있습니다. –
실제 문제는 StackFrame이 코드에 대한 메타 데이터 일 뿐이며 코드의 라이브 버전이 아니라는 것입니다. – Yona
나는 두려웠다. 그러나 나는 다른 수업이 있기를 바랐다. –