Cenni preliminari sui metadati
Aggiornamento: novembre 2007
I metadati sono informazioni binarie che descrivono un programma e vengono memorizzate in un file eseguibile portabile (PE, Portable Executable) di Common Language Runtime o in memoria. Quando si compila il proprio codice in un file PE, i metadati vengono inseriti in una parte del file, mentre il codice viene convertito in Microsoft Intermediate Language (MSIL) e inserito in un'altra parte del file. Ogni tipo e membro definito e a cui si fa riferimento in un modulo o in un assembly è descritto nei metadati. Quando il codice viene eseguito, il runtime carica i metadati in memoria e vi fa riferimento per ottenere informazioni sulle classi utilizzate nel codice, come pure su membri, ereditarietà e così via.
I metadati consentono di descrivere ciascun tipo e membro definito nel codice in modo indipendente dal linguaggio. I metadati archiviano le seguenti informazioni:
Descrizione dell'assembly.
Identità (nome, versione, impostazioni cultura, chiave pubblica).
Tipi esportati.
Altri assembly da cui questo assembly dipende.
Autorizzazioni di protezione necessarie per l'esecuzione.
Descrizione di tipi.
Nome, visibilità, classe base e interfacce implementate.
Membri (metodi, campi, proprietà, eventi e tipi nidificati).
Attributi.
- Elementi descrittivi aggiuntivi che modificano tipi e membri.
Vantaggi offerti dai metadati
I metadati costituiscono la chiave di un modello di programmazione più semplice che elimina la necessità di file del linguaggio di definizione dell'interfaccia (IDL, Interface Definition Language), di file di intestazione o di qualsiasi altro metodo esterno di riferimento ai componenti. I metadati consentono ai linguaggi .NET di descrivere se stessi automaticamente e in modo indipendente dal linguaggio, in modo trasparente sia per lo sviluppatore che per l'utente. Le capacità dei metadati possono inoltre essere estese con l'uso degli attributi. I metadati offrono i seguenti vantaggi principali:
File autodescrittivi.
I moduli e gli assembly di Common Language Runtime sono autodescrittivi. I metadati di un modulo contengono tutto il necessario per interagire con un altro modulo. I metadati forniscono automaticamente le funzionalità di IDL in COM, consentendo di utilizzare un solo file sia per la definizione che per l'implementazione. Moduli e assembly di runtime non richiedono la registrazione presso il sistema operativo. Pertanto, le descrizioni utilizzate dal runtime rispecchiano sempre il codice effettivamente presente nel file compilato, incrementando così l'affidabilità dell'applicazione.
Interoperabilità dei linguaggi e progettazione basata su componenti semplificata.
I metadati forniscono tutte le informazioni relative al codice compilato che occorrono per ereditare una classe da un file PE scritto in un linguaggio diverso. È possibile creare un'istanza di una classe scritta in uno dei linguaggi gestiti (qualsiasi linguaggio che si avvale di Common Language Runtime) senza preoccuparsi del marshalling esplicito e senza utilizzare codice di interoperabilità personalizzato.
Attributi.
.NET Framework consente di dichiarare tipi specifici di metadati, detti attributi, nel proprio file compilato. Gli attributi sono disponibili nell'intero contesto di .NET Framework e vengono utilizzati per controllare in maggior dettaglio come si comporta il proprio programma in fase di esecuzione. È inoltre possibile inserire i propri metadati personalizzati nei file di .NET Framework tramite attributi personalizzati definiti dall'utente. Per ulteriori informazioni, vedere Estensione di metadati mediante attributi.