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 |
---|---|
Rappresenta un costrutto di uno spazio dei nomi in un file di origine. |
|
Rappresenta una struttura nel codice sorgente. |
|
Rappresenta un'interfaccia nel codice sorgente. |
|
Rappresenta una classe nel codice sorgente. |
|
Rappresenta un'enumerazione nel codice sorgente. |
|
Definisce un costrutto di una variabile in un file di origine. |
|
Rappresenta un delegato nel codice sorgente. |
|
Rappresenta un costrutto o un elemento di codice in un file di origine. |
|
Modella un elemento di un evento di codice. |
|
Definisce un costrutto di una proprietà in un file di origine. |
|
Definisce un attributo per un elemento di codice. |
|
Definisce l'utilizzo di istruzioni che importano spazi dei nomi. |
|
Rappresenta un costrutto di funzione in un file di origine. |
|
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 |
|
CodeNamespace |
|
CodeProperty |
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#)