Поделиться через


CodeAttribute2.AddArgument - метод

Добавляет в атрибут аргумент.

Пространство имен:  EnvDTE80
Сборка:  EnvDTE80 (в EnvDTE80.dll)

Синтаксис

'Декларация
Function AddArgument ( _
    Value As String, _
    Name As Object, _
    Position As Object _
) As CodeAttributeArgument
CodeAttributeArgument AddArgument(
    string Value,
    Object Name,
    Object Position
)
CodeAttributeArgument^ AddArgument(
    String^ Value, 
    [InAttribute] Object^ Name, 
    [InAttribute] Object^ Position
)
abstract AddArgument : 
        Value:string * 
        Name:Object * 
        Position:Object -> CodeAttributeArgument 
function AddArgument(
    Value : String, 
    Name : Object, 
    Position : Object
) : CodeAttributeArgument

Параметры

  • Value
    Тип: System.String
    Обязательный.Значение по умолчанию — 0. Элемент кода, после которого вставляется новый элемент.Если значением является CodeElement, то новый элемент добавляется после аргумента CodeElement.Если значение имеет тип данных Long, это свойство указывает, после какого элемента следует добавить новый элемент.Поскольку в коллекциях нумерация элементов начинается с 1, значение 0 означает, что новый элемент следует поместить в начало коллекции.Значение -1 означает, что аргумент следует поместить в конец.
  • Name
    Тип: System.Object
    Обязательный.Значение аргумента.
  • Position
    Тип: System.Object
    Необязательный.Если аргумент представляет собой именованный параметр, этот параметр содержит имя аргумента.

Возвращаемое значение

Тип: EnvDTE80.CodeAttributeArgument
Объект CodeAttributeArgument.

Заметки

Примечание

После присвоения значений аргументам атрибута кода, Visual Studio не сохраняет их в памяти. Поэтому при следующем обновлении аргумента атрибута кода они могут оказаться недействительными.Это значит, что при обращении к аргументу в будущем может быть возвращено E_FAIL или совершенно иное значение.(Однако эта проблема не распространяется на все, что связано с дочерними объектами элемента.)

В виду такого недетерминированного поведения, значение аргумента следует извлекать до того, как оно будет изменено.Например, при задании в коде аргумента атрибута кода, такого как myAttrArg.Value = """a first value""", перед его обновлением следует явно сослаться на него, например myAttrArg = myAttr.Arguments.Item("first value"), и только после этого присвоить новое значение: myAttrArg.Value = """a second value""".В этом случае гарантируется изменение необходимого аргумента.

Кроме того, значения элементов модели кода, таких как классы, структуры, функции, атрибуты, делегаты и т.п., после внесения некоторых изменений могут стать недетерминированными, иными словами, нельзя рассчитывать, что их значения не будут изменяться.Дополнительные сведения см. в разделе "Значения элементов модели кода могут изменяться" раздела Практическое руководство. Поиск кода при помощи модели кода (Visual Basic).

Примеры

В следующем примере создается новое пространство имен и атрибут в текущем классе и перечисляются некоторые свойства атрибута.

public void CreateClassAndAttrib(DTE2 applicationObject)
{
    // Before running, load or create a project.
    FileCodeModel2 fcm2 = GetFileCodeModel(applicationObject);
    CodeAttribute2 cmAttribute;
    CodeClass2 cmClass;
    String msg = null;

    if (fcm2 != null)
    {
        CodeNamespace cmNamespace;
        // Try to create a new namespace.
        try
        {
            cmNamespace = fcm2.AddNamespace("CMNamespace", -1);
            // If successful, create the other code elements.
            if (cmNamespace != null)
            {
                cmClass = (CodeClass2)cmNamespace.AddClass("ANewClass", 
                -1, null, null, vsCMAccess.vsCMAccessPrivate);
                cmAttribute = (CodeAttribute2)cmClass.AddAttribute
                ("NewAttribute", "AttributeValue", -1);
                msg += "# of Arguments: " + cmAttribute.Arguments.Count 
                + Environment.NewLine;
                MessageBox.Show(msg);
                cmAttribute.AddArgument("NewAddedValue", null, null);
                msg += "# of Arguments: " + cmAttribute.Arguments.Count 
                + Environment.NewLine;
                MessageBox.Show(msg);                       
            }
            else
            {
                MessageBox.Show("Cannot continue - no filecodemodel 
                available.");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("ERROR: " + ex);
        }
    }
}

public FileCodeModel2 GetFileCodeModel(DTE2 applicationObject)
{
    // Returns the FileCodeModel object of the active 
    // window.
    TextWindow txtWin = 
    (TextWindow)applicationObject.ActiveWindow.Object;
    FileCodeModel2 fcm2;
    if (txtWin != null)
    {
        try
        {
             fcm2 = (FileCodeModel2)txtWin.Parent.
             ProjectItem.FileCodeModel;
             return fcm2;
        }
        catch (Exception ex)
        {
             MessageBox.Show("ERROR: " + ex);
             return null;
        }
    }
    else
        return null;
}

Безопасность платформы .NET Framework

См. также

Ссылки

CodeAttribute2 Интерфейс

EnvDTE80 - пространство имен

Другие ресурсы

Практическое руководство. Компиляция и выполнение примеров кода модели объектов автоматизации

Практическое руководство. Поиск кода при помощи модели кода (Visual Basic)

Практическое руководство. Поиск кода при помощи модели кода (Visual C#)