CodeElement2.ElementID 属性

获取一个唯一地标识元素的值。 未在 Visual C# 中实现。

命名空间:  EnvDTE80
程序集:  EnvDTE80(在 EnvDTE80.dll 中)

语法

声明
ReadOnly Property ElementID As String
string ElementID { get; }
property String^ ElementID {
    String^ get ();
}
abstract ElementID : string with get
function get ElementID () : String

属性值

类型:String
一个表示元素的唯一值的字符串。

备注

ElementID 属性是一个值,该值基于唯一标识元素的元素名称和其他信息计算得出。 ID 的确切计算方法因语言而异。

代码模型客户端使用该 ID 来跟踪元素,并且不保留引用。 该 ID 包含在代码模型事件中,用于向客户端代码通知发生更改的元素。 新 ID 在创建时提供。

ElementID 属性的值不应视为永久值。 该值在每次为某个项目创建代码模型时都有可能更改,在当前会话中也有可能更改。 每次 ElementID 发生更改时,会发生一个 ElementChanged 事件。

备注

不能调用 RenameSymbol 或 ElementID 后期绑定。(例如 DTE.ActiveDocument.ProjectItem.FileCodeModel.CodeElements.Item("Class1").RenameSymbol("Class2")。)在进行调用之前,必须将对象显式强制转换为 CodeElement2 接口。

EnvDTE80 中的代码元素(以下称代码*2对象)从 EnvDTE 中的代码元素派生。(例如,CodeClass2CodeClass 派生,CodeElement2CodeElement 派生。)在 Visual Studio 的内部,所有的代码元素(位于这两个程序集中)都又强制转换为 CodeElement2。因此,在逻辑上,它好像是 CodeClass2,例如,最终从 CodeElement2 派生。

由于两个元素实际上位于两个单独的继承层次结构中,因此后期绑定功能无法在代码*2 对象上查找 CodeElement2 方法。重要EnvDTE 相同的方式工作,但是,使用预处理器宏允许接口定义这些继承的方法上转换存在的所有显式定义相关接口。使用类似的继承方案,EnvDTE80 接口定义,仅无需使用预处理器语句。这是更简洁的解决方案,因为它消除了冗余属性,但将导致属性不能被称为后期绑定。若要解决此问题,请在调用之前将对象显式强制转换为 CodeElement2 接口。

同样,在进行某些类型的编辑之后,代码模型元素(如类、结构、函数、特性、委托等)的值可能是非确定性的,这意味着不能指望它们的值总是保持不变。有关更多信息,请参见 使用代码模型查找代码 (Visual Basic) 中的“代码模型元素的值可能会更改”一节。

.NET Framework 安全性

请参阅

参考

CodeElement2 接口

EnvDTE80 命名空间

其他资源

如何:编译和运行自动化对象模型代码示例

使用代码模型查找代码 (Visual Basic)

使用代码模型查找代码 (Visual C#)