Termine generale per T [], T * e T & [chiuso]

0

Un array di T , un puntatore a T e un riferimento a T (rappresentato come T[] , T* , e T& rispettivamente di Type.ToString ) condividono tutti la similarità con la quale sono costruiti da un tipo di "elemento" (che può essere restituito da Type.GetElementType ). Qual è il termine corretto per affrontare tutti questi tipi? Sono propenso a dire tipi "derivati" o "costruiti", ma il primo può essere confuso con l'ereditarietà e il secondo con i generici. Gli array multidimensionali potrebbero anche cadere sotto il termine.

    
posta IllidanS4 23.02.2016 - 17:05
fonte

2 risposte

2

In generale, le funzioni che accettano un tipo e restituiscono un altro tipo sono chiamate costruttori di tipi.

Questo termine dovrebbe essere ben noto tra i linguaggi funzionali, ma meno nelle lingue tradizionali, spesso perché la notazione dell'array è l'unica utilizzata.

    
risposta data 23.02.2016 - 17:12
fonte
1

In C #, T [] può essere definito come array o "array covarianti", che hanno sia C # sia Java. Alcune critiche linguistiche ritengono che gli array covarianti siano stati un errore e che sarebbero stati diversi se i generici fossero stati nella lingua fin dall'inizio.

C # non ha "riferimento a T" (ad esempio T& come si trova in C ++). Mentre puoi prendere l'indirizzo di qualcosa, diventa un tipo di puntatore (come in C). C # ha parametri out e ref, ma C # considera il tipo di out int abc semplicemente come int (non int& , che non esiste in C #) che deve essere assegnato prima di lasciare il metodo normalmente.

C # ha dei puntatori, che possono essere usati solo in un contesto non sicuro. Mentre gli array sono di tipo "gestito" (cioè garbage collection e type-safe), i puntatori non lo sono. Puoi prendere l'indirizzo di un elemento dell'array in un puntatore, ma per usarlo correttamente, dovresti pin l'array in modo che il runtime / gc non si muova o rimuova, poiché in un certo senso questo è un mix gestito e non gestito tipi.

Quindi, non penso che ci sia un termine generico in C # per questi tre tipi, in quanto uno non è supportato, e gli altri due sono gestiti vs. non gestiti, che possono essere correlati, ma sono bestie piuttosto diverse.

    
risposta data 23.02.2016 - 19:10
fonte

Leggi altre domande sui tag