You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6源代码生成器:获取接口基类型成员的实现方案

解决Roslyn源代码生成器获取继承接口成员的问题
  • 直接通过TypeDeclarationSyntax无法获取基接口的成员,语法树层面仅保留当前类型的显式成员,基接口的成员必须通过语义模型来获取。
  • 你已经通过代码拿到了当前接口的INamedTypeSymbol(declaredSymbol),接下来可以遍历它的所有基接口,递归提取所需成员:
// 假设declaredSymbol是Extended接口的INamedTypeSymbol实例
var allProperties = new List<IPropertySymbol>();

// 先添加当前接口的属性成员
allProperties.AddRange(declaredSymbol.GetMembers().OfType<IPropertySymbol>());

// 遍历所有层级的基接口(包括间接继承的)
foreach (var baseInterface in declaredSymbol.AllInterfaces)
{
    // 添加基接口的属性成员
    allProperties.AddRange(baseInterface.GetMembers().OfType<IPropertySymbol>());
}
  • 关键细节说明:
    • 若仅需直接继承的基接口,可替换为declaredSymbol.Interfaces(AllInterfaces会返回所有层级的继承接口)。
    • 可通过IPropertySymbol的Name、Type等属性,结合SyntaxFactory生成目标类的属性声明语法节点。
    • 若存在子接口重写基接口成员的场景,可通过比较成员的OriginalDefinition属性来去重。

内容的提问来源于stack exchange,提问作者Manuel Kroiß

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:05:28