CodeAttribute2.Collection (Propiedad)
Obtiene una colección de objetos CodeAttribute2.
Espacio de nombres: EnvDTE80
Ensamblado: EnvDTE80 (en EnvDTE80.dll)
Sintaxis
'Declaración
ReadOnly Property Collection As CodeElements
Get
CodeElements Collection { get; }
property CodeElements^ Collection {
CodeElements^ get ();
}
abstract Collection : CodeElements
function get Collection () : CodeElements
Valor de propiedad
Tipo: EnvDTE.CodeElements
Una colección de objetos CodeAttribute2.
Implementaciones
Comentarios
Nota
Una vez asignados los valores del argumento del atributo de código, Visual Studio no los conserva en memoria y, por ello, pueden ser o no ser válidos si se produce una actualización del argumento del atributo de código. Es decir, un acceso subsiguiente al argumento podría devolver E_FAIL o un valor totalmente distinto. (Sin embargo, todo lo que afecte a los elementos secundarios del elemento no tiene este problema).
Debido a este comportamiento no determinista, se debería recuperar el valor del argumento antes de cambiarlo. Por ejemplo, si establece un argumento de atributo de código en el código, como myAttrArg.Value = """a first value""", debería hacer referencia a él explícitamente antes de actualizarlo, por ejemplo myAttrArg = myAttr.Arguments.Item("first value") y, a continuación, asignar el nuevo valor, myAttrArg.Value = """a second value""". Esto garantiza que se cambie el argumento correcto.
Además, los valores de los elementos de modelo de código como clases, structs, funciones, atributos, delegados, etc., pueden ser no deterministas una vez realizados determinados tipos de modificaciones; esto significa que no se puede confiar en que sus valores se mantengan siempre igual. Para obtener más información, vea la sección Los valores de elementos de modelo de código pueden cambiar, en Detectar código utilizando el modelo de código (Visual Basic).
Ejemplos
El siguiente ejemplo crea un nuevo espacio de nombres y atributo en la clase actual y muestra algunas de las propiedades del atributo.
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 += "Attribute count: " +
cmAttribute.Collection.Count + Environment.NewLine;
msg += "Document name: " +
cmAttribute.DTE.ActiveDocument.Name;
}
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;
}
Seguridad de .NET Framework
- Plena confianza para el llamador inmediato. Un código de confianza parcial no puede utilizar este miembro. Para obtener más información, vea Utilizar bibliotecas de código que no es de plena confianza.
Vea también
Referencia
Otros recursos
Cómo: Compilar y ejecutar los ejemplos de código del modelo de objetos de automatización
Detectar código utilizando el modelo de código (Visual Basic)