【问题标题】:Inspecting constructor chain via Roslyn通过 Roslyn 检查构造函数链
【发布时间】:2017-10-25 04:03:14
【问题描述】:

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

是否可以通过语义模型做到这一点?

说明我尝试的代码如下:

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

我无法跟踪任何公共接口(如IConstructorSymbol),因此我可以将ctor0ctor1 转换为。

【问题讨论】:

  • 这不是元数据的一部分;你需要源代码。
  • 好吧,我以某种方式绕过了限制,方法是返回到语法,然后再返回到语义,然后再返回到语法等等,直到到达顶部构造函数。我现在的问题是为什么语义不存储这种信息(构造函数链)。这不就是语义模型的意义吗?

标签: c# roslyn roslyn-code-analysis


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2014-08-02
    相关资源
    最近更新 更多