DeclaringSyntaxReferences界面中的Locations属性和ISyntax属性有什么区别?
答案 0 :(得分:4)
答案的线索在<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}{}}
所以obj
是System.Object
。这是有道理的,因为您没有任何实际的源代码,因此编译中的语法将定义System.Object
。