ISymbol之间的差异.声明SyntaxReferences和ISymbol.位置

本文关键字:ISymbol SyntaxReferences 位置 声明 之间 | 更新日期: 2023-09-27 18:00:58

ISyntax接口中的DeclaringSyntaxReferences属性和Locations属性之间有什么区别?

ISymbol之间的差异.声明SyntaxReferences和ISymbol.位置

答案的线索在<remarks>注释部分:

声明该符号的语法节点。如果符号是在元数据中声明的或是隐式声明的,则返回一个空的只读数组。

这意味着,Locations还返回元数据引用声明和隐式声明的位置。你可以在LocationsTests.cs文件中看到这方面的证据:

var c = s.GetTypeMembers("C", 0).Single() as NamedTypeSymbol;
var obj = c.BaseType;
Assert.Equal("MetadataFile(CommonLanguageRuntimeLibrary)", obj.Locations[0].ToString());

其中c是中的class C

namespace N.S{class C{int F; void M(int P}{}}

所以CCD_ 5是CCD_。这是有道理的,因为在编译中没有任何实际的源代码,因此也没有定义System.Object语法