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.
Nota |
---|
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:
Per le interfacce, il valore di GuidAttribute viene utilizzato al posto della proprietà TypeIdentifierAttribute.Scope, mentre la proprietà Type.FullName (vale a dire il nome del tipo, incluso lo spazio dei nomi) viene utilizzata al posto della proprietà TypeIdentifierAttribute.Identifier.
Per le strutture, le enumerazioni e i delegati, l'oggetto GuidAttribute dell'assembly contenitore viene utilizzato al posto della proprietà Scope, mentre la proprietà Type.FullName viene utilizzata al posto della proprietà Identifier.
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.