CodeElement2.ElementID 属性

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

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

语法

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

属性值

类型:System.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#)