Equivalenza del tipo e tipi di interoperabilità incorporati

A partire da .NET Framework versione 4, Common Language Runtime supporta l'incorporamento delle informazioni sui tipi COM direttamente in assembly gestiti, anziché richiedere che tali assembly ottengano le informazioni dagli assembly di interoperabilità. Poiché le informazioni sui tipi incorporate includono solo i tipi e i membri realmente utilizzati da un assembly gestito, è possibile che due assembly gestiti presentino visualizzazioni molto diverse dello stesso tipo COM. Ogni assembly gestito dispone di un oggetto Type diverso per rappresentare la visualizzazione del tipo COM. Common Language Runtime supporta l'equivalenza del tipo tra queste visualizzazioni diverse per interfacce, strutture, enumerazioni e delegati.

Equivalenza del tipo significa che di un oggetto COM passato da un assembly gestito a un altro è possibile eseguire il cast al tipo gestito appropriato nell'assembly ricevente.

NotaNota

L'equivalenza del tipo e i tipi di interoperabilità incorporati semplificano la distribuzione di applicazioni e componenti aggiuntivi che utilizzano componenti COM, in quanto non è necessario distribuire assembly di interoperabilità con le applicazioni.Gli sviluppatori di componenti COM devono comunque creare assembly di interoperabilità primari (PIA) se desiderano che i componenti vengano utilizzati dalle versioni di .NET Framework precedenti.

Equivalenza del tipo

L'equivalenza dei tipi COM è supportata per interfacce, strutture, enumerazioni e delegati. I tipi COM sono qualificabili come equivalenti se soddisfano tutte le seguenti condizioni:

  • I tipi sono entrambi interfacce, entrambi strutture, entrambi enumerazioni o entrambi delegati.

  • L'identità dei tipi è la stessa, come descritto nella sezione che segue.

  • Entrambi i tipi sono idonei per l'equivalenza del tipo, come descritto nella sezione Contrassegno dei tipi COM per l'equivalenza del tipo.

Identità del tipo

Si dice che due tipi hanno la stessa identità quando i relativi ambiti e le identità corrispondono; in altre parole, se ognuno di essi dispone dell'attributo TypeIdentifierAttribute e i due attributi hanno proprietà Scope e Identifier corrispondenti. Il confronto di Scope viene eseguito senza distinzione tra maiuscole e minuscole.

Se un tipo non dispone dell'attributo TypeIdentifierAttribute, o se dispone di un attributo TypeIdentifierAttribute che non specifica l'ambito e l'identificatore, può ancora essere considerato per l'equivalenza come segue:

Contrassegno dei tipi COM per l'equivalenza del tipo

Esistono due modi per contrassegnare un tipo come idoneo per l'equivalenza del tipo:

  • Applicare l'attributo TypeIdentifierAttribute al tipo.

  • Rendere il tipo un tipo di importazione COM. Un'interfaccia è un tipo di importazione COM se dispone dell'attributo ComImportAttribute. Un'interfaccia, una struttura, un'enumerazione o un delegato è un tipo di importazione COM se l'assembly nel quale è definito dispone dell'attributo ImportedFromTypeLibAttribute.

Vedere anche

Riferimenti

IsEquivalentTo

Concetti

Utilizzo di tipi COM nel codice gestito

Importazione di una libreria dei tipi come assembly