저는 C#을 처음 접했고 런타임시 로컬로 선언 된 필드 값을 가져올 수 있는지 알고 싶습니다. 예를 들어, 아래 예제의 ClassToTest는 변경할 수 없습니다.런타임에 로컬 필드 값 가져 오기
예 :
public class ClassToTest {
public void func() {
int number = 25;
}
}
Public class MyProgram {
public static void Main() {
ClassToTest instance = new ClassToTest();
instance.func();
// Can field "number" value be extracted here?
}
}
내가 반사 및 기타 조립 관련 물건을하지만 여전히 행운을 찾고있다. 어떤 제안이라도 대단히 감사하겠습니다.
아니요, 불가능하며 그렇게 할 이유가 없습니다. 'number'는 메소드가 아닌 클래스에 적용됩니다. 또한 컴파일 할 수있는 게시 코드로 시작해야합니다. 당신이 그것을 실행할 수 있는지 직접 테스트하십시오.값을 원하면 메서드에서 반환하거나 클래스/인스턴스 범위 속성을 만들고 값을 설정합니다. – Igor
나는 예제를 얻을 수있는 가장 간단한 것으로 축소했다. 원래 내가 작업하고있는 프로그램은 이것보다 훨씬 크고 복잡합니다. 또한 ClassToTest를 리팩터링 할 수 없습니다. –
아주 간단합니다. 이 메소드는 값을 설정하지만 범위를 벗어나면 (즉, 메소드가 실행을 마친 즉시) 변수와 그 값이 스택에서 팝핑됩니다. 그 가치를 얻을 수있는 방법은 없습니다. 또한 가치를 얻으 려하지 마라. 그것은 단지 ** 매우 나쁜 프로그래밍 습관이다. 당신은 캡슐화를 깨뜨릴 것입니다. 그 값에 관심이 있다면, 그것을 알고있는 인스턴스에서 그것을 설정하는 방법을 찾거나 그것을 반환하거나 그것을 다시 계산하는 새로운 메쏘드를 작성하십시오. – Igor