Costanti in C #

9

Perché il compilatore memorizza i valori costanti nei metadati dell'assieme? Sono direttamente incorporati nel codice della lingua intermedia dai metadati dell'assembly?

    
posta Arun 02.01.2013 - 09:45
fonte

4 risposte

3

Il modo migliore per pensarci lo trovo: al momento della compilazione un const viene convertito in un valore letterale in cui viene utilizzato.

L'unico motivo per cui è stato inserito nel manifest nell'assembly in cui è stato definito è stato renderlo accessibile ai consumatori. È una parte di un determinato tipo e i metadati di quel tipo sono memorizzati nel suo assembly, non negli assembly che lo consumano.

Quindi, è un valore letterale in-linea nel consumo e una proprietà o campo incapsulato del tipo consumabile nei metadati.

    
risposta data 02.01.2013 - 17:19
fonte
2

Mi sono interrogato da molto tempo e ho trovato da un libro che questo può essere il motivo ...

Poiché i valori costanti non cambiano mai, le costanti sono considerate come parte del tipo di definizione. Pertanto, la definizione delle costanti crea metadati.

    
risposta data 02.01.2013 - 18:11
fonte
1

Penso che mischiate due assiemi.

La costante viene memorizzata solo nei metadati nell'assembly dove è definita . I metadati contengono informazioni su tutti i tipi e membri in un assieme e le costanti sono membri.

Nessuna informazione sulla costante è memorizzata nell'assembly in cui è utilizzata . Il valore costante viene utilizzato direttamente nell'IL, proprio come se avessi scritto il numero o la stringa costante direttamente nella sorgente.

Un esempio: una delle mie applicazioni utilizza molte costanti per identificare tabelle e campi del database. Ho un assembly che contiene solo tutte le costanti.

Quando costruisco l'applicazione aggiungo un riferimento all'assembly "costanti" in Visual Studio. Poiché l'assembly contiene solo costanti, non vi è alcun riferimento ad esso nella mia applicazione e l'assembly "costanti" non è necessario in fase di esecuzione.

    
risposta data 02.01.2013 - 16:53
fonte
1

Le costanti sono conosciute in fase di compilazione e quindi vengono memorizzate nei metadati dell'assembly. Ciò significa che è possibile definire le costanti solo per i tipi primitivi.

Sì, sono caricati direttamente dai metadati. Non ci sarebbe alcuna allocazione di memoria in fase di runtime.

    
risposta data 03.01.2013 - 04:22
fonte

Leggi altre domande sui tag