Compartir a través de


Información general del objeto CodeModel en aplicaciones de Visual Basic y C#

Actualización: noviembre 2007

Es posible que deba examinar mediante programación la estructura del código en una aplicación de Visual Basic, Visual C# o Visual J#. Quizás desee conocer los espacios de nombres definidos en la aplicación y sus relaciones de anidamiento. O bien, es posible que desee crear un documento que muestre las clases y sus miembros públicos como base de la documentación.

El objeto CodeModel2 es un objeto de extensibilidad general que proporciona acceso al código de una aplicación. El objeto CodeModel2 no proporciona ninguna lista textual del código. En su lugar, proporciona una colección anidada de objetos que representa los elementos de código. Por ejemplo, cada espacio de nombres del código se representa mediante un objeto CodeNamespace. La propiedad CodeModel tiene acceso al objeto CodeModel2 asociado a un proyecto.

El objeto FileCodeModel2 es un objeto de extensibilidad general que proporciona acceso al código de un único archivo de código fuente. Cada archivo de código fuente se representa en una aplicación mediante un objeto ProjectItem y el objeto FileCodeModel2 asociado a un elemento de proyecto se encuentra en la propiedad FileCodeModel.

Tanto el objeto CodeModel2 como FileCodeModel2 proporcionan respectivamente las propiedades CodeModel2.CodeElements y FileCodeModel.CodeElements, que es una colección de objetos CodeElement2. Visual Basic, Visual C#y Visual J# admiten CodeModel2 y los objetos FileCodeModel de formas ligeramente diferentes. Para obtener un ejemplo de una implementación de Visual Basic, vea Detectar código utilizando el modelo de código (Visual Basic) y Cómo: Utilizar el objeto CodeModel para analizar código de Visual Basic. Para obtener un ejemplo de una implementación de Visual C#, vea Detectar código utilizando el modelo de código (Visual C#) y Cómo: Crear una clase de C# con el objeto CodeModel.

Algunos lenguajes no implementan el modelo de código completo de Visual Studio. Los temas de la Ayuda indican las excepciones cuando existen. La mayor parte de las diferencias entre implementaciones del modelo de código se deben a diferencias funcionales entre los lenguajes. Por ejemplo, no puede agregar funciones a objetos CodeNamespace en Visual Basic, en Visual C# ni en Visual J# porque sólo Visual C++ incorpora definiciones de función de nivel superior.

Los objetos principales del modelo de código aparecen en la tabla siguiente. Haga clic en los vínculos para ver la lista de métodos y propiedades de cada objeto.

Tipo

Descripción

CodeNamespace

Representa una construcción de espacio de nombres en un archivo de código fuente.

CodeStruct2

Representa una clase en código fuente.

CodeInterface2

Objeto que representa una interfaz en código fuente.

CodeClass2

Representa una clase en código fuente.

CodeEnum

Objeto que representa una enumeración en código fuente.

CodeVariable2

Representa una construcción de espacio de nombres en un archivo de código fuente.

CodeDelegate2

Representa una clase en código fuente.

CodeElement2

Representa un elemento de código o una construcción en un archivo de código fuente.

CodeEvent

Modela un elemento de evento de código.

CodeProperty2

Representa una construcción de espacio de nombres en un archivo de código fuente.

CodeAttribute2

Define un atributo para un elemento de código.

CodeImport

Modela el uso de instrucciones que importan espacios de nombres.

CodeFunction2

Representa una construcción de función en un archivo de código fuente.

CodeParameter2

Define un parámetro de una función, propiedad, etc.

Elementos de código anidados

Los elementos de código de una aplicación se organizan en una estructura anidada. Por ejemplo, el objeto FileCodeModel2 de un elemento de proyecto puede contener, en su colección CodeElements, un elemento de código para un espacio de nombres. A su vez, el objeto CodeNamespace, que representa dicho espacio de nombres, puede contener muchos otros elementos de código que representen clases en su propiedad Members. Cada elemento CodeClass2 puede, asimismo, contener elementos de código que representen propiedades (objeto CodeProperty2) y métodos (objeto CodeFunction2). Los métodos para recuperar elementos de código anidados dependen del tipo de elemento de código y se describen en la sección siguiente.

Categorías de elementos de código

La clase CodeElement2 es una clase básica que representa todos los elementos de código de un elemento de un proyecto (archivo de código fuente). Muchas clases se derivan de CodeElement2 para representar las construcciones de una aplicación, incluidos los espacios de nombres, las clases, las propiedades, los métodos y los eventos. Los elementos de código se podrían dividir en dos amplias categorías: los que representan tipos y los que no lo hacen.

Algunos elementos de código de una aplicación representan a tipos. Estos elementos de código se derivan del objeto CodeType y del objeto CodeElement2:

Se puede determinar si una referencia a un objeto CodeElement2 es uno de estos tipos mediante la propiedad IsCodeType. Para encontrar los elementos de código anidados de estos tipos, utilice la propiedad Members, que devuelve una colección CodeElements. En Cómo: Utilizar el objeto CodeModel para analizar código de Visual Basic se incluye un ejemplo que busca todas las clases de un proyecto.

El modo de encontrar los elementos de código anidados bajo otros tipos de elementos de código depende del tipo del elemento de código anidado. Por ejemplo, debido a que una propiedad sólo tiene un método Get y un método Set, el objeto CodeProperty2 asociado a una propiedad tiene las propiedades Getter y Setter que devuelven elementos CodeFunction2. La lista siguiente muestra qué propiedades usar para buscar los elementos de código anidados de los distintos tipos de elementos de código.

Tipo

Propiedad

CodeFunction

Parameters

CodeNamespace

Members

CodeProperty

Getter y Setter

Elementos de código de referencias externas

El código puede contener declaraciones de tipo provenientes de tipos definidos en referencias del proyecto (Las referencias del proyecto se agregan mediante el cuadro de diálogo Agregar referencias o con el método de extensibilidad References.Add). El sistema de proyectos de Visual Basic no resuelve los objetos CodeTypeRef2 que representan a estas referencias, tan sólo resuelve sus nombres. Por lo tanto, si se intenta usar cualquiera de los otros métodos o propiedades del objeto CodeElement2 asociado a la referencia, que no sea la propiedad Name, se producirá una excepción "Sin implementar". Estas referencias se conocen como elementos de código "nombre de tipo sólo". Los objetos CodeType que representan referencias externas tienen la propiedad InfoLocation establecida en vsCMInfoLocationNone.

Errores del compilador y el objeto CodeModel

Cuando escriba código que mantenga referencias a objetos CodeElement2, tenga en cuenta que el código fuente subyacente puede cambiar mientras se conserva la referencia. Puede que el elemento de código se elimine, cambie de nombre o sufra un error de compilación. Cuando esto sucede, las llamadas al objeto CodeElement2 devuelven el mensaje de error "Excepción de HRESULT: 0x80047E2C".

Vea también

Tareas

Cómo: Utilizar el objeto CodeModel para analizar código de Visual Basic

Solución de problemas de extensibilidad en Visual Basic y Visual C#

Conceptos

Detectar código utilizando el modelo de código (Visual Basic)

Detectar código utilizando el modelo de código (Visual C#)