2017-10-24 14 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のセマンティックモデルは、オブジェクトブラウザに表示されるものに対応します。

コンストラクタの内容を表示するには、構文ツリーを使用する必要があります。