C# e VB.NET sono dotati di tipi integrati che si associano ai tipi CLR. Gli esempi sono: int (C#) e Integer (VB) si associa alle mappe System.Int32, long (C#) e Long (VB) a System.Int64. Quali sono le migliori pratiche per decidere quando utilizzare i tipi incorporati o non usarli (usando invece il sistema. * Structs/classes)?Tipi incorporati, quando (non) utilizzare?
risposta
L'unica volta che utilizzerei esplicitamente "System.XYZ"
in preferenza per una parola chiave di tipo built-in è quando ho bisogno di un tipo intero di dimensione molto specifica, e voglio che sia chiaro a chiunque legga il mio codice (ad es. potrebbe utilizzare Int32
invece di int
se il numero intero in questione è in realtà 4 campi da 8 bit imballati in comune.)
i tipi di lingue (ad esempio string, int, char) sono semplicemente alias per i tipi CLR (System.String, sistema .Int32, System.Char).
Sono intercambiabili, non è necessario preferire uno rispetto all'altro
EDIT
Il poster chiesto un aiuto nella scelta tra i due, molto bene.
Personalmente tendo di scegliere i tipi di linguaggio C# (int, string, char ecc), perché coinvolgono meno di battitura - Credo di essere solo pigro :)
In altre parole. Sono esattamente la stessa cosa. Pensa: String s = "hi"; Stringa s2 = s; s e s2 sono la stessa stringa. – jjnguy
@jjnguy: Non si tratta dei valori di S & S2 uguali, ignorare i valori. Sto dicendo che i tipi che contengono i valori (non i valori) sono identici. cioè string s1 = "Ciao"; System.String s2 = "Mondo"; s1 è lo stesso TYPE di s2, indipendentemente dal fatto che i loro valori differiscano. –
ho quasi sempre usare l'incorporato in alias, come int/short/long. Sono più facili da leggere e non richiedono l'importazione del sistema o la digitazione di System.Int32 ovunque, ecc.
Il linguaggio li definisce chiaramente e dà loro un significato specifico, quindi non vedo alcun danno. Tuttavia, questo è al 100% una scelta personale.
Detto questo, l'unico posto in cui utilizzo esplicitamente Int32, Int16, ecc., È se si tratta di archiviazione binaria o trasferimento, in particolare verso o da un formato binario personalizzato. In questo caso, avere il bit esplicito di ciascun membro che entra e esce dal file rende il codice più leggibile e comprensibile, IMO.
Utilizzare "int" e "Int32" (e gli altri) sono esattamente gli stessi. Tipicamente vengono utilizzate le parole chiave (int, Integer (vb.net), bool, ecc ...), perché è più breve ed è highlited in IDE.
Uso sempre i tipi System.*
perché sembrano più coerenti tra le altre classi: lettere maiuscole e la stessa evidenziazione della sintassi. Ma questa è solo una preferenza personale e solo un problema estetico.
Piuttosto che quando utilizzare o non utilizzare i tipi di lingua rispetto ai nomi di classi BCL espliciti, è più importante sapere se il tipo che si intende utilizzare è conforme a CLS.
In particolare, i tipi di numeri interi senza segno non sono conformi a CLS poiché non è richiesto che un linguaggio supporti la matematica dei numeri interi senza segno.
Diverso da questa ruga ... Vorrei raccomandare qualsiasi idioma sia più in linea con le pratiche del codice aziendale. Se il namespace è completo, i riferimenti continueranno con quello System. * Namespace ... (Suggerisco anche contro quella pratica, tuttavia, poiché aggiunge il carico del lettore senza un guadagno in termini di chiarezza).
E 6 anni dopo: il set di regole StyleCop usa i builtin. –
- 1. TipoScript: conversione dei tipi incorporati
- 2. Elenco di tipi di carattere WPF incorporati
- 3. errore quando si cerca di utilizzare moduli incorporati in Symfony2
- 4. Funzione template C++ per array, vettori, tipi incorporati, STL
- 5. Tipi di sottoclassi incorporati in Python 2 e Python 3
- 6. I tipi interi a larghezza fissa sono garantiti come typedefs per i tipi standard incorporati?
- 7. MongoDB incorporati oggetti polimorfici
- 8. Attività di override eseguita dai tipi di UIActivity incorporati
- 9. Quando non utilizzare RegexOptions.Compiled
- 10. Quando utilizzare vari tipi di cassette postali Akka
- 11. Quando utilizzare, non utilizzare, OneToOne e ManyToOne
- 12. Quando utilizzare (o non utilizzare) un delegato
- 13. Quando utilizzare e quando non utilizzare Python 3.5 `attendere '?
- 14. Come ottenere Ghostscript per utilizzare i caratteri incorporati in PDF
- 15. Quando utilizzare limit e quando non su
- 16. Perché non è possibile utilizzare tipi primitivi con tipi di ritorno polimorfici?
- 17. Quando utilizzare i tipi di base (Integer, String) e quando scrivere una nuova classe?
- 18. Scala - Come utilizzare i Functional su tipi non funzionali?
- 19. Perché i modelli non possono utilizzare i tipi locali?
- 20. Qual è la differenza tra i tipi di vettorizzazione e gli array C incorporati in GCC?
- 21. Ci sono specialità all'interno dei campi incorporati
- 22. Comandi incorporati WPF
- 23. Quando utilizzare JMS e quando utilizzare REST?
- 24. Symfony 2 moduli incorporati
- 25. Quando utilizzare/non utilizzare un adattatore di sincronizzazione
- 26. Quando utilizzare e non utilizzare la classe Application di Android?
- 27. Quando non riesco a utilizzare ConfigureAwait (false)?
- 28. con SIP, quando utilizzare TCP non UDP?
- 29. quando non utilizzare gli sprite CSS?
- 30. Quando non utilizzare un nodo Drupal?
Ho scelto la risposta di Shawn perché mi fornisce una solida base di scelta tra le due opzioni.Un'altra risposta è semplicemente "è uguale, usa entrambi" - questo non è molto utile, IMO. Se posso scegliere la seconda migliore risposta, sarebbe quella di Reed. In ogni caso, poiché le persone si lamentano, lascerò che arrivino altre risposte ... –