Classi di insiemi X++

Nota

I gruppi di interesse della comunità si sono ora spostati da Yammer a Microsoft Viva Engage. Per unirti a una community Viva Engage e partecipare alle ultime discussioni, compila il modulo Richiedi accesso alla Comunità Viva Engage Finanza e Operazioni e scegli la community a cui vuoi entrare.

La sintassi del linguaggio X++ fornisce due tipi compositi: matrici e contenitori. Questi tipi compositi sono utili per l'aggregazione di valori di tipi primitivi. Tuttavia, non è possibile archiviare gli oggetti classe in matrici o contenitori.

Usa le classi di raccolta per memorizzare gli oggetti. Consentono di creare array, elenchi, set, mappe e struct che possono contenere qualsiasi tipo di dati, anche oggetti. Per ottenere prestazioni massime, C++ implementa queste classi (sono classi di sistema). Le classi di raccolta erano precedentemente note come classi di base. Le classi di raccolta sono Array, List, Map, Set e Struct.

  • Array : questa classe è simile al tipo di array nel linguaggio X++, ma può contenere valori di qualsiasi tipo, anche oggetti e record. Accedi agli oggetti in un ordine specifico.
  • Elenco – Questa classe contiene elementi a cui accedi in sequenza. A differenza di una matrice, la classe List fornisce un metodo addStart . Analogamente alla classe Set , la classe List fornisce i metodi getEnumerator e getIterator . È possibile utilizzare un iteratore per inserire ed eliminare elementi da un oggetto List .
  • Mappa : questa classe associa un valore chiave a un altro valore.
  • Set : questa classe contiene valori di qualsiasi tipo. I valori non vengono memorizzati nella sequenza in cui li aggiungi. Al contrario, l'oggetto Set archivia il valore in modo da ottimizzare le prestazioni per il metodo in . Un oggetto Set ignora qualsiasi tentativo di aggiungere un valore già memorizzato dall'oggetto Set . A differenza della classe Array , la classe Set fornisce i metodi in e remove .
  • Struct : questa classe può contenere valori di più di un tipo. Viene utilizzato per raggruppare le informazioni su un'entità specifica.

Il costruttore di ogni classe di raccolta, ad eccezione di Struct , accetta un parametro di tipo che è un elemento dell'enumerazione di sistema Types . L'istanza di raccolta può archiviare solo elementi di quel tipo. L'elemento enum Types::AnyType è un caso speciale che non puoi usare per costruire un oggetto collezione, come un oggetto Set . Il valore null non può essere archiviato come elemento in un oggetto Set . Inoltre, null non può essere una chiave in un oggetto Map . È possibile scorrere un oggetto insieme utilizzando un iteratore o un enumeratore. Di seguito sono riportati esempi tipici che illustrano come ottenere un iteratore.

new MapIterator(myMap)
myMap.getEnumerator()

Per gli oggetti Set , se aggiungi o rimuovi elementi dopo la creazione di un iteratore, l'istanza dell'iteratore non può più essere usata per leggere o attraversare la collezione.

Per gli oggetti Map , come per gli oggetti Set , se rimuovi qualsiasi elemento, l'iteratore non è più valido. Tuttavia, un oggetto MapIterator rimane valido anche dopo una chiamata al metodo Map.insert , indipendentemente dal fatto che la chiave sia nuova o che la chiave esista già e solo il valore venga aggiornato nell'elemento Map . Il codice che chiama Map.insert e dipende dal fatto che l'oggetto iteratore rimanga valido potrebbe non riuscire se viene eseguito come CIL di .NET Framework.

Usa le classi di raccolta per formare classi più complesse. Ad esempio, puoi facilmente implementare uno stack usando una lista in cui aggiungi sempre elementi all'inizio della lista. L'elemento più recente occupa quindi la parte superiore della pila.

È inoltre possibile estendere le classi di raccolta. Ad esempio, è possibile estendere la classe List per creare un elenco di record di clienti in cui le operazioni sono indipendenti dai tipi. In questo caso, la classe di raccolta derivata accetta solo record clienti.