c'è una differenza tra una struct in C++ e una struct in C#?c'è una differenza tra una struct in C++ e una struct in C#?
risposta
In C# si utilizzano le strutture per definire i tipi di valore (in contrapposizione ai tipi di riferimento dichiarati da class
es).
In C++, una struttura è la stessa cosa di una classe con un livello di accessibilità predefinito di public
.
Quindi la domanda dovrebbe essere: sono le strutture in C# diverse dalle classi in C++ e, sì, sono: non è possibile derivare da strutture C#, non è possibile avere funzioni virtuali, non è possibile definire costruttori predefiniti, non si dispone distruttori, ecc.
Structs in C# molto diverso da classi, vedere Structs vs Classes per ulteriori
Structs in C++ sono identici a classi, eccetto che i membri sono pubblici per impostazione predefinita. Oltre a ciò, una struct C++ può fare tutto ciò che una classe C++ può fare.
Le strutture C# possono avere costruttori: semplicemente non possono avere un costruttore * predefinito *. –
Marc: Hai notato il mio errore intenzionale lì, ben fatto. . . post scriptum L'ho risolto :) –
@Marc: Hanno sempre un costruttore predefinito, non puoi definire il tuo proprio :-) – MartinStettner
Sì.
struct in C# sono Plain Old, in valore, i tipi di dati (in contrasto con le classi che sono di riferimento e hanno ll la roba OO)
struct in C++ sono solo di classe che sono pubblici per impostazione predefinita.
Stai cercando di interoperare tra C++ gestito e C#? Se è così, ci sono estensioni a C++ per consentire questo: vedere link
Una struttura C# è un codice gestito, che verrà liberato dalla spazzatura C# quando nessuno si riferisce ad esso più. Il suo distruttore viene chiamato ogni volta che il garbage collector decide di ripulirlo.
Una struttura C++ è un oggetto non gestito, che è necessario pulire autonomamente. Il distruttore è chiamato in modo prevedibile quando lo elimini, o esce dall'ambito.
Le strutture C# non sono oggetti; non sono * loro * soggetti alla garbage collection (a meno che non siano campi su un tipo che * è * garbage collection, cioè una classe). Le strutture C# non possono definire un finalizzatore: "Errore 1 Solo i tipi di classe possono contenere distruttori" –
Un buon punto sul finalizzatore. Ma le strutture sono oggetti che penso: "MyStruct is object" restituisce true. E qualcuno deve liberare la memoria che la struttura usa; il garbage collector lo farà, se la struttura è nell'heap. – Andomar
- 1. Differenze tra struct in C e C++
- 2. array multidimensionali in una struct in C#
- 3. Scopo della struct, typedef struct, in C++
- 4. Come assegnare una struct C in linea?
- 5. puntatori in una struct volatile C
- 6. Zero-reinizializzazione una struct in C++
- 7. Posso "estendere" una struct in C?
- 8. in C++, posso ricavare una classe da una struct
- 9. struct e typedef in C contro C++
- 10. È sicuro restituire una struct in C o C++?
- 11. significato di "questo" per una struct (C#)
- 12. XML to C struct e C struct to XML
- 13. C struct in Python
- 14. Convert C++ struct in C#
- 15. assegnare una struct ad un altro in C
- 16. struct Esterno in C
- 17. Lanciare tra il puntatore struct in C
- 18. Qual è la differenza tra struct addrinfo e struct sockaddr
- 19. Come implementare una matrice bidimensionale di struct in C
- 20. Cosa significa `*` in una dichiarazione C `typedef struct`?
- 21. Come lavorare con i campi stringa in una struct C?
- 22. Elixir Come convertire una mappa struct ad una struct Record
- 23. Come si accede una struct nidificato all'interno di una struct
- 24. typedef'ing un array contro l'uso di una struct in C++
- 25. posso inserire un selettore C obiettivo in una struct?
- 26. intesa C dimensioni ++ struct
- 27. struct allineamento C/C++
- 28. Array all'interno struct in C
- 29. Conversione da una struct all'altro
- 30. Definizione struct introspettiva in C++?
Il punto di Martin sulle strutture C# essendo i tipi di valore è piuttosto importante per le prestazioni perché devono essere in box e unbox per alcune operazioni. Si prega di leggere su "boxe" se è necessario preoccuparsi delle prestazioni. – dss539