2010-11-29 14 views
-1

에 c를 소유에 PROPERTYNAME를 가져옵니다 그러지 마. 나는 속성을 소유하고있는 클래스에서 그 속성의 이름이 무엇인지 속성에 대해 알아야합니다.나는 다음과 같은 구조를 가지고 #

+0

고유 한 CLR 버전을 만들지 않으면이 작업을 수행 할 수 없습니다. – SLaks

답변

2

이것은 완전히 완전히 불가능합니다.

단일 인스턴스는 여러 속성에서 참조 할 수 있습니다. 객체와 그 객체가 참조하는 속성 사이에는 연결이 없습니다. (GC에서는 예외는 없습니다.)

또한 JIT 인라이닝은 속성이 전혀 관련되지 않는다는 것을 의미 할 수 있습니다.
로컬 변수 이름이 최적화 된 바이너리에 존재하지 않습니다.

+0

물론 불가능하지 않습니다. 정말 정말 열심히합니다. Stack Trace를 사용하여 Hello가 호출되는 메소드를 얻을 수 있습니다. 그런 다음 방법 본문을 사용하여 파악하십시오. 비록 거기에서도 나는 그것을 할 수있는 좋은 방법을 볼 수 없다. 그러나 모든 의향과 목적에 대해 당신의 대답은 올바른 것입니다. –

+0

@Yuriy : 아니요. 그것은 정말로 불가능합니다. 당신은 호출이 메서드에서 어디 까지나 중요한 메서드에서 비롯된 것인지를 안정적으로 파악할 수 없습니다. (아마도 JITter를 복제하거나 두 번째 프로세스를 만들어 관리 된 디버거로 연결하면 _insane_ 및 불가능할 것입니다.) – SLaks

+0

질문은 디자인에 심각한 오류가 있음을 의미하지만 속성 (로컬 변수가 아닌) 만 지원하면됩니다. 스택 추적을보고 메서드가 Bla.Hello()를 호출하는 객체를 찾은 다음 리플렉션을 사용하여 모든 객체의 속성 및 필드로 이동하고 값이 Bla 인스턴스 인 객체를 찾습니다. – Ran

1

나는 당신이 요구하는 것이 가능하다고 생각하지 않습니다. 당신이 reliabily 반사와 함께이 작업을 수행 할 수있는 방법이

SomeProperty = new Bla("SomeProperty"); 
AnotherProperty = new Bla("AnotherProperty"); 
+0

이 현재 솔루션이지만, 누군가가 속성의 이름을 바꾸고 생성자를 잊어 버리면 뒤에있는 논리는 실패하지만 컴파일러는이를 확인할 수 없습니다. – Kolja

1

없습니다와 : 인스턴스를 만들 때 어쩌면 하나 개의 방법이 문자열을하는 것이 즐의 생성자에 대한 것 할, 다음, 당신은 문자열에 전달할 수 있습니다 그것은 처음부터 끔찍한 생각입니다. 인스턴스에 대한 메소드를 호출 할 때 변수를 선언하지 않고 메소드를 호출 할 수 있습니다. 예 :

string name=new Bla().Hello(); 

이 시나리오에서는 무엇을 인쇄합니까?

+0

+1 그 반증에 대해 깜빡했다. – SLaks

관련 문제