Condividi tramite


Cenni preliminari sull'oggetto CodeModel per applicazioni Visual Basic e C#

Aggiornamento: novembre 2007

Potrebbe essere necessario esaminare a livello di codice la struttura del codice in un'applicazione Visual Basic, Visual C# o Visual J#. desiderare di conoscere gli spazi dei nomi definiti nell'applicazione, nonché le relative relazioni di nidificazione. In alternativa, è possibile creare un documento in cui siano elencate le classi, e i relativi membri pubblici, come base per la documentazione.

L'oggetto CodeModel2 è un oggetto extensibility generale che consente di accedere al codice in un'applicazione. L'oggetto CodeModel2 non fornisce un elenco testuale del codice, ma un insieme nidificato di oggetti che rappresenta elementi di codice. Ogni spazio dei nomi nel codice, ad esempio, è rappresentato da un oggetto CodeNamespace. La proprietà CodeModel accede all'oggetto CodeModel2 associato a un progetto.

L'oggetto FileCodeModel2 è un oggetto extensibility generale che consente di accedere al codice in un solo file di origine. Ogni file di origine di un'applicazione è rappresentato da un oggetto ProjectItem e l'oggetto FileCodeModel2 associato a un elemento di progetto è presente nella proprietà FileCodeModel.

Gli oggetti CodeModel2 e FileCodeModel2 forniscono rispettivamente le proprietà CodeModel2.CodeElements e FileCodeModel.CodeElements, ovvero un insieme di oggetti CodeElement2. Visual Basic, Visual C# e Visual J# supportano gli oggetti CodeModel2 e FileCodeModel in modalità leggermente diverse. Per un esempio di implementazione di Visual Basic, vedere Individuazione di codice mediante il modello di codice (Visual Basic) e Procedura: utilizzare l'oggetto CodeModel per analizzare codice Visual Basic. Per un esempio di implementazione di Visual C#, vedere Individuazione di codice mediante il modello di codice (Visual C#) e Procedura: creare una classe C# utilizzando l'oggetto CodeModel.

In alcuni linguaggi non è implementato l’intero modello di codice di Visual Studio. Gli argomenti della Guida segnalano le eventuali eccezioni. La maggior parte delle differenze tra implementazioni del modello di codice è dovuta a differenze funzionali tra i linguaggi. Non è ad esempio possibile aggiungere funzioni a oggetti CodeNamespace in Visual Basic, Visual C# o Visual J# poiché solo in Visual C++ sono disponibili definizioni di funzioni di primo livello.

Nella tabella riportata di seguito sono elencati i principali oggetti modello di codice. Fare clic sui collegamenti per visualizzare l'elenco di metodi e proprietà per ogni oggetto.

Tipo

Descrizione

CodeNamespace

Rappresenta un costrutto di uno spazio dei nomi in un file di origine.

CodeStruct2

Rappresenta una struttura nel codice sorgente.

CodeInterface2

Rappresenta un'interfaccia nel codice sorgente.

CodeClass2

Rappresenta una classe nel codice sorgente.

CodeEnum

Rappresenta un'enumerazione nel codice sorgente.

CodeVariable2

Definisce un costrutto di una variabile in un file di origine.

CodeDelegate2

Rappresenta un delegato nel codice sorgente.

CodeElement2

Rappresenta un costrutto o un elemento di codice in un file di origine.

CodeEvent

Modella un elemento di un evento di codice.

CodeProperty2

Definisce un costrutto di una proprietà in un file di origine.

CodeAttribute2

Definisce un attributo per un elemento di codice.

CodeImport

Definisce l'utilizzo di istruzioni che importano spazi dei nomi.

CodeFunction2

Rappresenta un costrutto di funzione in un file di origine.

CodeParameter2

Definisce un parametro di una funzione, una proprietà e così via.

Elementi di codice nidificati

Gli elementi di codice di un'applicazione sono organizzati in un'architettura nidificata. È ad esempio possibile che nell'oggetto FileCodeModel2 di un elemento di progetto sia contenuto, nel relativo insieme CodeElements, un elemento di codice per uno spazio dei nomi. L'oggetto CodeNamespace che rappresenta lo spazio dei nomi potrebbe contenere diversi altri elementi di codice che a loro volta rappresentano classi nella relativa proprietà Members. È possibile che in ogni elemento CodeClass2 siano a loro volta contenuti elementi di codice che rappresentano proprietà (oggetto CodeProperty2) e metodi (oggetto CodeFunction2). I metodi per il recupero di elementi di codice nidificati dipendono dal tipo di elemento di codice e vengono descritti nella sezione successiva.

Categorie di elementi di codice

La classe CodeElement2 è una classe base che rappresenta tutti gli elementi di codice in un elemento di progetto (file di origine). Molte classi derivano da CodeElement2 per rappresentare i costrutti in un'applicazione, inclusi spazi dei nomi, classi, proprietà, metodi ed eventi. Gli elementi di codice sono raggruppati in due ampie categorie, quelli che rappresentano i tipi e quelli che non li rappresentano.

Alcuni elementi di codice in un'applicazione rappresentano dei tipi. Questi elementi di codice derivano dall'oggetto CodeType e dall'oggetto CodeElement2:

È possibile determinare se un riferimento a un oggetto CodeElement2 è uno di questi tipi utilizzando la proprietà IsCodeType. Per trovare gli elementi di codice nidificati di questi tipi, utilizzare la proprietà Members che restituisce un insieme CodeElements. In Procedura: utilizzare l'oggetto CodeModel per analizzare codice Visual Basic è incluso un esempio in cui viene illustrato come trovare tutte le classi di un progetto.

Le procedure per trovare gli elementi di codice nidificati sotto altri tipi di elementi di codice dipendono dal tipo di elemento di codice nidificato. Poiché, ad esempio, una proprietà dispone unicamente di un metodo Get e di un metodo Set, l'oggetto CodeProperty2 associato a una proprietà disporrà di proprietà Getter e Setter dalle quali verranno restituiti elementi CodeFunction2. Nell'elenco che segue sono elencate le proprietà da utilizzare per individuare gli elementi di codice nidificati nei tipi di elementi di codice.

Tipo

Proprietà

CodeFunction

Parameters

CodeNamespace

Members

CodeProperty

Getter e Setter

Elementi di codice da riferimenti esterni

È possibile che nel codice siano contenute dichiarazioni di tipi provenienti da tipi definiti nei riferimenti al progetto. I riferimenti al progetto vengono aggiunti tramite la finestra di dialogo Aggiungi riferimenti o mediante il metodo di extensibility References.Add. Nel sistema del progetto Visual Basic gli oggetti CodeTypeRef2, che rappresentano questi riferimenti, non vengono risolti ad eccezione dei relativi nomi. Pertanto, se si tenta di utilizzare uno degli altri metodi o proprietà dell'oggetto CodeElement2 associato al riferimento, che non sia la proprietà Name, verrà generata un'eccezione "Not implemented". Questi riferimenti sono definiti elementi di codice "solo nome di tipo". La proprietà InfoLocation degli oggetti CodeType che rappresentano riferimenti esterni è impostata su vsCMInfoLocationNone.

Errori di compilazione e l'oggetto CodeModel

Quando si scrive codice che conserva riferimenti a oggetti CodeElement2, è necessario ricordare che il codice sorgente sottostante può cambiare mentre si conserva il riferimento. L'elemento di codice può essere eliminato, rinominato oppure essere compreso in un errore di compilazione. Quando si verifica uno di questi casi, qualsiasi chiamata all'oggetto CodeElement2 restituirà il messaggio di errore "Eccezione da HRESULT: 0x80047E2C".

Vedere anche

Attività

Procedura: utilizzare l'oggetto CodeModel per analizzare codice Visual Basic

Risoluzione dei problemi relativi all'estensibilità in Visual Basic e Visual C#

Concetti

Individuazione di codice mediante il modello di codice (Visual Basic)

Individuazione di codice mediante il modello di codice (Visual C#)