ISymbol.DeclaringSyntaxReferences和ISymbol.Locations之间的区别
ISyntax接口中的DeclaringSyntaxReferences属性和Locations属性之间有什么区别?
答案的线索在
评论部分:
声明符号的语法节点。 如果符号在元数据中声明或隐式声明,则返回空的只读数组。
这意味着, 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 NS{class C{int F; void M(int P}{}}
所以obj
是System.Object
。 这是有道理的,因为在编译中没有任何实际的源代码,因此也没有定义System.Object
语法 。