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!