Condividi tramite


Metadati e componenti auto-descrittivi

In passato, un componente software (EXE o DLL) scritto in un linguaggio non poteva utilizzare facilmente un componente software scritto in un linguaggio diverso. Il sistema COM ha costituito un passo in avanti nella soluzione di questo problema. Oggi .NET Framework rende l'interazione tra i componenti ancora più semplice consentendo ai compilatori di inserire informazioni dichiarative aggiuntive in tutti i moduli e in tutti gli assembly. Queste informazioni, note come metadati, semplificano l'interazione tra i componenti.

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 e 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 sicurezza necessarie per l'esecuzione.

  • Descrizione di tipi.

    • Nome, visibilità, classe base e interfacce implementate.

    • Membri (metodi, campi, proprietà, eventi e tipi annidati).

  • 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 ed eliminano 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 Framework 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.

Argomenti correlati

Titolo

Descrizione

I metadati e la struttura dei file PE

Viene illustrato come i metadati vengono archiviati separatamente dal linguaggio MSIL (Microsoft Intermediate Language) in un file PE.

Utilizzo dei metadati in fase di esecuzione

Viene illustrato l'utilizzo dei metadati in fase di esecuzione con un esempio di codice.

Estensione di metadati mediante attributi

Viene descritto come applicare attributi, scrivere attributi personalizzati e recuperare le informazioni archiviate negli attributi.