Equivalenza del tipo e tipi di interoperabilità incorporati

A partire da .NET Framework 4, Common Language Runtime supporta l'incorporamento di informazioni sui tipi COM direttamente negli assembly gestiti, anziché richiedere agli assembly gestiti di ottenere informazioni sui tipi COM dagli assembly di interoperabilità. Dato che le informazioni sui tipi incorporate includono solo i tipi e membri che vengono effettivamente usati da un assembly gestito, due assembly gestiti potrebbero avere viste diverse dello stesso tipo COM. Ogni assembly gestito a un oggetto Type diverso per rappresentare la vista specifica del tipo COM. Common Language Runtime supporta l'equivalenza del tipo tra queste viste diverse per interfacce, strutture, enumerazioni e delegati.

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

Nota

L'equivalenza del tipo e i tipi di interoperabilità incorporati semplificano la distribuzione delle applicazioni e dei componenti aggiuntivi che usano componenti COM, perché non è necessario distribuire gli assembly di interoperabilità con le applicazioni. Gli sviluppatori di componenti COM condivisi devono ancora creare gli assembly di interoperabilità primari, se vogliono che i componenti possano essere usati da versioni precedenti di .NET Framework.

Equivalenza del tipo

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

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

  • I tipi hanno la stessa identità, come descritto nella sezione successiva.

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

Identità dei tipi

Due tipi vengono considerati aventi la stessa identità quando i relativi ambiti e identità corrispondono, in altre parole, se ognuno ha l'attributo TypeIdentifierAttribute e i due attributi hanno proprietà Scope e Identifier corrispondenti. Il confronto per Scope non applica la distinzione tra maiuscole e minuscole.

Se un tipo non ha l'attributo TypeIdentifierAttribute oppure ha un attributo TypeIdentifierAttribute che non specifica l'ambito e l'identificatore, il tipo può ancora essere considerato per l'equivalenza, come indicato di seguito:

Contrassegno dei tipi COM per l'equivalenza del tipo

È possibile contrassegnare un tipo come idoneo per l'equivalenza del tipo in due modi:

  • Applicare l'attributo TypeIdentifierAttribute al tipo.

  • Impostare il tipo come tipo di importazione COM. Un'interfaccia è un tipo di importazione COM se ha l'attributo ComImportAttribute. Un'interfaccia, una struttura, un'enumerazione o un delegato è un tipo di importazione COM se l'assembly in cui è definito ha l'attributo ImportedFromTypeLibAttribute.

Vedi anche