2017-10-24 18 views
0

나는 기본 클래스 B과 파생 된 EB 클래스를 가지고 있다고 가정 해 보겠습니다. EB의 생성자가 호출하는 기본 생성자를 어떻게 확인할 수 있습니까?Roslyn을 통해 생성자 체인 검사

의미 론적 모델을 통해이를 수행 할 수 있습니까? 다음과 같이 내 시도를 보여

코드는 다음과 같습니다

var typeSymbol = semanticModel.GetDeclaredSymbol(classDeclarationSyntax); 
IMethodSymbol ctor1 = typeSymbol.Constructors[0]; 
IMethodSymbol ctor2 = typeSymbol.Constructors[1]; 

내가 어떤 공개 인터페이스 (IConstructorSymbol을 같은) 추적 할 수 없습니다 그래서 나는 ctor0ctor1에 캐스팅 할 수있다.

+0

이것은 메타 데이터의 일부가 아닙니다. 소스가 필요합니다. – SLaks

+0

좋아, 필자는 어떻게 든 구문에 되돌리고, 다시 구문으로 돌아가서 구문에 다시 도달함으로써 제한을 우회했다. 제 질문은 이제 의미론이 이러한 종류의 정보 (컨트럭터 체인)를 저장하지 않는 이유입니다. 어떤 의미 론적 모델이 아닌가? – user3284063

답변

0

의미 론적 모델은 메타 데이터 (클래스 및 해당 멤버)이며 실제 코드 내의 제어 흐름/구현에 대한 의미는 아닙니다.

이 때문에 Roslyn이 디 컴파일러가 아니더라도 참조 된 어셈블리에 대한 의미 론적 모델을 얻을 수 있습니다.

IOW의 의미 체계는 개체 브라우저에 표시되는 것과 같습니다.

생성자의 내용을 보려면 구문 트리를 사용해야합니다.