Share via


CodeElement2 接口

表示源文件中的代码元素或构造。

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

语法

声明
<GuidAttribute("F03DCCE8-233B-43D7-A66B-A66EFC1F85C3")> _
Public Interface CodeElement2 _
    Inherits CodeElement
[GuidAttribute("F03DCCE8-233B-43D7-A66B-A66EFC1F85C3")]
public interface CodeElement2 : CodeElement
[GuidAttribute(L"F03DCCE8-233B-43D7-A66B-A66EFC1F85C3")]
public interface class CodeElement2 : CodeElement
[<GuidAttribute("F03DCCE8-233B-43D7-A66B-A66EFC1F85C3")>]
type CodeElement2 =  
    interface 
        interface CodeElement 
    end
public interface CodeElement2 extends CodeElement

CodeElement2 类型公开以下成员。

属性

  名称 说明
公共属性 Children 获取此 CodeElement2 中包含的对象的集合。
公共属性 Collection 获取包含支持此属性的 CodeElement2 的 CodeElements 集合。
公共属性 DTE 获取顶级扩展性对象。
公共属性 ElementID 获取一个唯一地标识元素的值。未在 Visual C# 中实现。
公共属性 EndPoint 获取表示代码项结束位置的文本点。
公共属性 Extender 如果请求的 Extender 可用于此 CodeElement2 对象,则返回该 Extender。未在 Visual C# 中实现。
公共属性 ExtenderCATID 获取 CodeElement2 对象的扩展程序类别 ID (CATID)。未在 Visual C# 中实现。
公共属性 ExtenderNames 获取 CodeElement2 对象的可用扩展程序的列表。未在 Visual C# 中实现。
公共属性 FullName 获取 CodeElement2 对象文件的完整路径和名称。
公共属性 InfoLocation 获取代码模型的功能。
公共属性 IsCodeType 获取是否可以从 CodeElement2 对象中获取 CodeType 对象。
公共属性 Kind 获取一个枚举,该枚举定义代码元素的类型。
公共属性 Language 获取用于创作 CodeElement2 的编程语言。
公共属性 Name 获取或设置 CodeElement2 对象的名称。
公共属性 ProjectItem 获取与该 CodeElement 对象关联的 ProjectItem 对象。
公共属性 StartPoint 获取一个 TextPoint 对象,该对象定义 CodeElement2 的开始位置。

页首

方法

  名称 说明
公共方法 GetEndPoint 获取一个 TextPoint 对象,该对象标记代码元素定义的结束位置。
公共方法 GetStartPoint 获取一个 TextPoint 对象,该对象标记代码元素定义的开始位置。
公共方法 RenameSymbol 更改对象的已声明名称,并更新对当前项目范围内的对象的所有代码引用。

页首

备注

代码元素可以为任何代码段,但通常,对语言中的每个定义或声明语法都有一个 CodeElement2 对象。 这意味着对于文件中大多数顶级定义或声明,或者对于类定义中的任何语法形式等,都有一个相应的 CodeElement2 对象。

备注

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

示例

[Visual Basic]

Sub IsCodeTypeExample(ByVal dte As DTE2)

    ' NOTE: This example requires a reference to the System.Text 
    '       namespace.

    ' Before running this example, open a code document from a project.
    Dim item As ProjectItem = dte.ActiveDocument.ProjectItem
    Dim sb As New StringBuilder

    RecurseElements(item.FileCodeModel.CodeElements, 0, sb)

    MsgBox(item.Name & " contains the following elements:" & vbCrLf & _
        vbCrLf & sb.ToString())

End Sub

Sub RecurseElements(ByVal elems As CodeElements, _
    ByVal level As Integer, ByVal sb As StringBuilder)

    Dim elem As CodeElement
    For Each elem In elems
        ' Add element to the list of names.
        sb.Append(" "c, level * 8)
        sb.Append(elem.Name & " [" & elem.Kind.ToString() & "]" & _
            vbCrLf)

        ' Call this function recursively if element has children.
        If elem.Kind = vsCMElement.vsCMElementNamespace Then
            RecurseElements(CType(elem, CodeNamespace).Members, _
                level + 1, sb)
        ElseIf elem.IsCodeType Then
            RecurseElements(CType(elem, CodeType).Members, _
                level + 1, sb)
        End If
    Next
End Sub

[C#]

public void IsCodeTypeExample(DTE2 dte)
{
    // NOTE: This example requires a reference to the System.Text 
    //       namespace.

    // Before running this example, open a code document from a 
    // project.
    ProjectItem item = dte.ActiveDocument.ProjectItem;
    StringBuilder sb = new StringBuilder();

    RecurseElements(item.FileCodeModel.CodeElements, 0, sb);

    MessageBox.Show(item.Name + " contains the following elements:" + 
        Environment.NewLine + Environment.NewLine + sb.ToString());
}

void RecurseElements(CodeElements elems, int level, StringBuilder sb)
{
    foreach (CodeElement elem in elems)
    {
        // Add element to the list of names.
        sb.Append(' ', level * 8);
        sb.Append(elem.Name + " [" + elem.Kind.ToString() + "]" + 
            Environment.NewLine);

        // Call this function recursively if element has children.
        if (elem.Kind == vsCMElement.vsCMElementNamespace)
            RecurseElements(((CodeNamespace)elem).Members, 
                level + 1, sb);
        else if (elem.IsCodeType)
            RecurseElements(((CodeType)elem).Members, level + 1, sb);
    }
}

请参阅

参考

EnvDTE80 命名空间

其他资源

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

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

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