CodeModel.AddFunction 方法

更新:2007 年 11 月

创建新的函数代码构造,并将代码插入正确的位置。

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

语法

声明
Function AddFunction ( _
    Name As String, _
    Location As Object, _
    Kind As vsCMFunction, _
    Type As Object, _
    Position As Object, _
    Access As vsCMAccess _
) As CodeFunction
用法
Dim instance As CodeModel
Dim Name As String
Dim Location As Object
Dim Kind As vsCMFunction
Dim Type As Object
Dim Position As Object
Dim Access As vsCMAccess
Dim returnValue As CodeFunction

returnValue = instance.AddFunction(Name, _
    Location, Kind, Type, Position, Access)
CodeFunction AddFunction(
    string Name,
    Object Location,
    vsCMFunction Kind,
    Object Type,
    Object Position,
    vsCMAccess Access
)
CodeFunction^ AddFunction(
    String^ Name, 
    Object^ Location, 
    vsCMFunction Kind, 
    Object^ Type, 
    Object^ Position, 
    vsCMAccess Access
)
function AddFunction(
    Name : String, 
    Location : Object, 
    Kind : vsCMFunction, 
    Type : Object, 
    Position : Object, 
    Access : vsCMAccess
) : CodeFunction

参数

  • Location
    类型:System.Object

    必选。新函数定义的路径和文件名。根据语言的不同,文件名是项目文件的相对名称或绝对名称。如果该文件还不是项目项,则将该文件添加到项目中。如果无法创建该文件并将其添加到项目中,则 AddFunction 失败。

  • Kind
    类型:EnvDTE.vsCMFunction

    必选。指示函数类型的 vsCMFunction 常数,例如,函数是一个 Property Get 还是一个方法,等等。

  • Position
    类型:System.Object

    可选。默认为 0。将在其后添加新元素的代码元素。如果该值为 CodeElement,则紧跟在其后添加新元素。

    如果该值为 Long 数据类型,则 AddFunction 指示在哪个元素的后面添加新元素。

    因为集合从 1 开始计数,所以传递 0 指示应将新元素放置在集合的开始处。值 -1 表示应将元素放在结尾处。

返回值

类型:EnvDTE.CodeFunction

一个 CodeFunction 对象。

备注

下列代码使用 vsCMFunction.vsCMFunctionOperator 添加重载运算符。

Sub testAddOverloadOperatorCPP()

Dim fcm As FileCodeModel = _

DTE.ActiveDocument.ProjectItem.FileCodeModel

Dim cc As CodeClass = fcm.CodeElements.Item("someClassName")

cc.AddFunction("+", vsCMFunction.vsCMFunctionOperator, _

vsCMTypeRef.vsCMTypeRefInt)

'cc.AddFunction("someFunction +", _

vsCMFunction.vsCMFunctionFunction, vsCMTypeRef.vsCMTypeRefInt)

End Sub

在这种情况下,您必须在 AddFunction 调用中显式指定要重载的函数的名称(在本示例中为“someFunction”),而不仅仅是重载运算符本身。

以上述代码为例,cc.AddFunction("+", vsCMFunction.vsCMFunctionOperator,...) 不起作用。必须改用 cc.AddFunction("someFunction +", vsCMFunction.vsCMFunctionFunction,...)

由于 C#、Visual Basic 和 J# 不支持顶级函数,因此只有 Visual C++ 实现 AddFunction。

本机 Visual C++ 要求其完全限定类型名使用以冒号 (::) 分隔的格式。

说明:

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

示例

Sub AddFunctionExample(ByVal dte As DTE2)

    ' Before running this example, open a code document from a project.
    Try
        Dim projItem As ProjectItem = dte.ActiveDocument.ProjectItem
        Dim cm As CodeModel = projItem.ContainingProject.CodeModel

        ' Create a new function.
        cm.AddFunction("TestFunction", projItem.Name, _
            vsCMFunction.vsCMFunctionFunction, _
            vsCMTypeRef.vsCMTypeRefInt)
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

End Sub
public void AddFunctionExample(DTE2 dte)
{
    // Before running this example, open a code document from 
    // a project.
    try
    {
        ProjectItem projItem = dte.ActiveDocument.ProjectItem;
        CodeModel cm = projItem.ContainingProject.CodeModel;

        // Create a new function.
        cm.AddFunction("TestFunction", projItem.Name, _
            vsCMFunction.vsCMFunctionFunction, _
            vsCMTypeRef.vsCMTypeRefInt, -1, _
            vsCMAccess.vsCMAccessDefault);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

权限

另请参见

参考

CodeModel 接口

CodeModel 成员

EnvDTE 命名空间

其他资源

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

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

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