2009-10-31 8 views
4

.net 어떻게 선언 형식에서 개체의 이름을 가져올 수 있습니다. 예를 들어 ....net에서 리플렉션을 사용하여 객체 이름을 가져 오는 방법은 무엇입니까?

+0

제쳐두고, 변수 이름과 런타임 값 사이의 매핑을 유지하려고하면 유지 관리가 어려워집니다. – JoshJordan

+1

당신이보고있는 것은 텍스트 파일이며 변수 이름은 어쨌든 컴파일되면 변수로 대체됩니다. Jitter가 포인터를 잡으면 결국 변수 이름이 포인터가됩니다. 변수 이름의 텍스트 값은 소스 파일 및 디버깅 기호 외부에서 보존되지 않습니다. – Josh

+0

왜 세계에서 당신은 그것을하고 싶어할까요? 설명해 주시겠습니까? –

답변

3

즉, 변수 이름이며 개체 이름이 아닙니다. 그것은 또한 질문을 제기합니다. 여기에 이름이 무엇입니까?

Information foo, bar; 
foo = bar = new Information(); 

당신은 생성자 등을 위해 이것을 할 수 없습니다. - 일반적으로 건방진 인이 캡처 구현 등에 의존

public static void Main() 
    { 
     Information dataInformation = new Information(); 
     Write(() => dataInformation); 
    } 
    static void Write<T>(Expression<Func<T>> expression) 
    { 
     MemberExpression me = expression.Body as MemberExpression; 
     if (me == null) throw new NotSupportedException(); 
     Console.WriteLine(me.Member.Name); 
    } 

참고 : 당신이 정말로 원하는 경우 제한 시나리오는, Expression를 통해 변수 이름을 얻을 수 있습니다.

+0

대단히 감사합니다. 마크, 생각 하나는 대답이 아니며, 다른 접근 방식을 설계하게되었습니다 ... 감사합니다. –

4

CLR이가는 한 실제로 개체 이름을 결정하는 방법은 없습니다. 이러한 종류의 정보는 디버깅 정보와 어셈블리에 (어느 정도까지) 저장되지만 런타임에는 사용되지 않습니다. 그럼에도 불구하고, 당신이 참조하고있는 객체는 단지 메모리의 한 묶음입니다. 여러 개의 이름을 가진 다중 참조를 가질 수 있으므로 객체를 참조하는 모든 변수의 이름을 얻을 수 있다고해도 사용하려는 프로그램을 프로그래밍 방식으로 결정할 수는 없습니다.

짧은 이야기 : 당신은 그렇게 할 수 없습니다.

+1

모든 프로그래머가 어셈블리 언어를 사용해야하는 이유는 C – Josh

+0

입니다. –

+0

Python은 스크립팅 언어이기도하며 .NET Framework와는 완전히 다르게 빌드됩니다. –

1

나는 이것이 가능하지 않다고 생각합니다.

하지만 처음에는 왜 이런 식으로해야합니까 ??

내 경험에 비추어 볼 때, 컴파일러 나 제공되지 않는 언어에서 이상한 것이 필요하다면, (가장 자주) 접근법이나 논리에 문제가 있음을 알게되었습니다.

왜 이것을 시도하고 있는지 다시 생각해보십시오.

+0

요약하면 많은 기능을 단순화 할 계획 인 프레임 워크를 설계하기 때문에이 기능이 필요합니다. 어쨌든 귀하의 의견을 보내 주셔서 감사합니다 ... –

관련 문제