.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ß
相关产品推荐
相关产品推荐

