2015-06-08 9 views
6

Perché Int32 utilizza int nel suo source code? Non Int32 uguale a int in C#? Quindi qual è il codice sorgente originale per int? Sono confuso ..Perché `Int32` usa` int` nel suo codice sorgente?

[Serializable] 
[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)] 
[System.Runtime.InteropServices.ComVisible(true)] 
#if GENERICS_WORK 
    public struct Int32 : IComparable, IFormattable, IConvertible 
     , IComparable<Int32>, IEquatable<Int32> 
///  , IArithmetic<Int32> 
#else 
    public struct Int32 : IComparable, IFormattable, IConvertible 
#endif 
    { 
     internal int m_value; // Here???? 

     public const int MaxValue = 0x7fffffff; 
     public const int MinValue = unchecked((int)0x80000000); 

     ... 
    } 

c'è la stessa questione tra Boolean e bool troppo.

+0

Int32 è 'struct'. Esso contiene i metodi e gli elementi per manipolare int, int è il tipo di dati definito dal sistema. –

+0

Questo * è * il codice sorgente originale per 'int'. Alcuni degli effettivi meccanismi interni sono parte del compilatore e del runtime, ma nella misura in cui esiste un codice sorgente, quello è il codice sorgente. – hvd

+1

Forse un duplicato: http://stackoverflow.com/questions/16113850/if-int32-is-just-an-alias-for-int-how-can-the-int32-class-use-an-int Relativo solo : http://stackoverflow.com/questions/18018281/regarding-primitive-data-types-in-c-sharp –

risposta

7

int, bool ecc sono semplicemente alias per incorporato tipi come rispettivamente Int32 e Boolean. Sono stenografie, quindi ha senso usarle. anche nelle loro definizioni.

Gli alias sono incorporati nel compilatore, pertanto non è necessario compilare la situazione "" di gallina e uova "prima che lo int sia accessibile. Non esiste "codice sorgente originale" per int. La "fonte" è per Int32 ed è condivisa tra le funzionalità integrate nel CLR (per la gestione dei primitivi) e il framework (per la definizione delle funzionalità per la manipolazione di quelle primitive). Come this answer to a duplicate question explains, la sorgente per Int32 non è una definizione valida del tipo stesso; è integrato nel CLR. Come tale, il compilatore deve fondere l'uso normalmente illegale di int all'interno di quel file per consentire al tipo Int32 di avere funzionalità.

+1

Quindi Int32 "include" stesso "ricorsivamente"? –

+5

Questo non risponde affatto alla domanda. – hvd

+0

@hvd, penso che tu sia confuso. Forse ti piacerebbe spiegare perché non risponda alla domanda e magari rispondi alla domanda "correttamente"? –

Problemi correlati