通过Roslyn检查构造函数链

时间:2017-10-24 16:13:06

标签: c# roslyn roslyn-code-analysis

假设我有一个基类B和一个派生的EB类。如何检查每个EB的构造函数调用哪个基础构造函数?

是否可以通过语义模型实现这一目标?

说明我尝试的代码如下:

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

我无法跟踪任何公共界面(例如IConstructorSymbol),因此我可以投放ctor0ctor1

1 个答案:

答案 0 :(得分:0)

语义模型是关于元数据(类及其成员),而不是实际代码中的控制流/实现。

这就是为什么可以为引用的程序集获取语义模型的原因(即使Roslyn不是反编译器)。

IOW,语义模型对应于您在对象浏览器中看到的内容。

您需要使用语法树来查看构造函数的内容。