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 中的代码元素派生。(例如,CodeClass2 从 CodeClass 派生,CodeElement2 从 CodeElement 派生。) 在 Visual Studio 的内部,所有的代码元素(位于这两个程序集中)都又强制转换为 CodeElement2。因此,在逻辑上,它好像是 CodeClass2,例如,最终从 CodeElement2 派生。
由于两个元素实际上位于两个单独的继承层次结构中,因此后期绑定功能无法在代码*2 对象上查找 CodeElement2 方法。EnvDTE 基本上以相同的方式工作,但是使用预处理器宏会允许定义接口,以便针对存在转换的所有相关接口显式定义所继承的方法。EnvDTE80 接口是通过使用类似的继承方案(只是不使用预处理器语句)定义的。这是更简洁的解决方案,因为它消除了冗余属性,但将导致属性不能被称为后期绑定。若要解决此问题,请在调用之前将对象显式强制转换为 CodeElement2 接口。
同样,在进行某些类型的编辑之后,代码模型元素(如类、结构、函数、特性、委托等)的值可能是非确定性的,这意味着不能指望它们的值总是保持不变。有关更多信息,请参见 使用代码模型查找代码 (Visual Basic) 中的“代码模型元素的值可能会更改”一节。
.NET Framework 安全性
- 对直接调用方的完全信任。此成员不能由部分信任的代码使用。有关更多信息,请参见通过部分受信任的代码使用库。