Diferencia entre Class y Struct

Fuentes


La primera gran diferencia es que las clases son tipo referencia mientras que las structs son tipo valor.

Algunas diferencias

Nota

En geekswithblogs.net hay un articulo mucho mas completo.

Feature Struct Class Notes
Is a reference type? No Yes  
Is a value type? Yes No  
Can have nested Types Yes Yes  
(enum, class, struct)?      
Can have constants? Yes Yes  
Can have fields? Yes Yes Campos de instancia estructura no se
pueden inicializar, se inicializará
automáticamente al valor por defecto.
Can have properties? Yes Yes  
Can have indexers Yes Yes  
Can have methods Yes Yes  
Can have Events Yes Yes Las estructuras, al igual que las
clases, pueden tener eventos, pero
se debe tener cuidado de que no se
suscribe a una copia de una
estructura en lugar de la estructura
que pretende.
Can have static members Yes Yes  
(constructors, fields,
methods, properties,
etc.)? Can inherit?
No Yes Las clases pueden heredar de otras
clases (o de objeto por defecto).
Las estructuras siempre heredan de
System.ValueType y se sellan de
manera implícita
Can implement interfaces? Yes Yes  
Can overload constructor? No Yes Sobrecarga de estructura del
constructor no oculta constructor
predeterminado
Can define default
constructor?
No Yes El constructor predeterminado
inicializa struct todos los campos
de instancia a los valores por
defecto y no se puede cambiar.
Can overload operators? Yes Yes  
Can be generic? Yes Yes  
Can be partial? Yes Yes  
Can be sealed? Always Yes Las estructuras siempre están
sellados y no se pueden tener
structs derivadas.
Can be referenced in instance Yes Yes  
members using this
keyword? Needs new
operator to create
instance?
No Yes Clases de C # deben instanciar
usando new. Sin embargo, las
estructuras no requieren esto.
Mientras que New se puede utilizar
en una estructura que llamar a un
constructor, puede optar por no
utilizar new e init los campos a ti
mismo, pero hay que init todos los
campos y los campos debe ser público!