Diferencia entre Struct y Class en C#

Muhammad Maisam Abbas 16 febrero 2024
  1. Estructura en C#
  2. Clase en C#
  3. Diferencia entre estructura y clase en C#
Diferencia entre Struct y Class en C#

En este tutorial, discutiremos las diferencias y similitudes entre estructuras y clases en C#.

Estructura en C#

La palabra clave struct define una estructura en C#. Similar a una clase, una estructura puede tener variables, propiedades y funciones. Podemos definir constructores para estructuras en C#. Pero no podemos definir constructores predeterminados para estructuras en C#. No podemos definir destructores para estructuras en C#. Las estructuras también pueden implementar interfaces en C#. La principal diferencia entre estructuras y clases es que no podemos usar una estructura como base de otras estructuras o clases para la herencia. El siguiente ejemplo de código nos muestra cómo definir una estructura simple usando la palabra clave struct en C#.

struct MyStructure {
  public int x;
};

En el código anterior, definimos una estructura con la palabra clave struct en C#. Las estructuras se pueden utilizar creando una instancia. El código para crear una instancia de una estructura se proporciona a continuación.

MyStructure S = new MyStructure();

En el código anterior, creamos una instancia de la estructura MyStructure con la palabra clave new en C#.

Clase en C#

La palabra clave class define una clase en C#. Similar a una estructura, una clase puede tener variables, propiedades y funciones en C#. También podemos definir constructores y destructores predeterminados para clases en C#. Una característica clave de las clases es la herencia. Entonces, una clase puede usarse como base de otras clases para la herencia. Otra característica única de las clases es el polimorfismo. El siguiente ejemplo de código nos muestra cómo definir una clase simple usando la palabra clave class en C#.

class MyClass {
  int x;
  public MyClass(int a) {
    this.x = a;
  }
  public void setx(int a) {
    this.x = a;
  }
  public void show() {
    Console.WriteLine("The value of x = {0}", x);
  }
}

En el código anterior, definimos una clase con la palabra clave class en C#. Las clases se pueden utilizar creando una instancia. El código para crear una instancia de una clase se proporciona a continuación.

MyClass C = new MyClass(100);

En el código anterior, creamos una instancia de la clase MyClass con la palabra clave new en C#.

Diferencia entre estructura y clase en C#

Las estructuras son variables de tipo valor y viven en la pila. Las clases son variables de tipo de referencia y viven en el montón con referencia a ese montón dentro de la pila.

Las estructuras no pueden tener valores nulos, mientras que las clases pueden tener valores nulos. Significa que una variable de tipo valor debe tener un valor, mientras que una variable de tipo de referencia puede apuntar o no a una dirección de memoria. La diferencia entre estructuras y clases en C# se demuestra en el siguiente ejemplo de codificación.

MyStructure S = new MyStructure();
MyStructure S2 = S;

S.x = 100;
S2.x = 200;

Console.WriteLine("Structure 1 = {0}", S.x);
Console.WriteLine("Structure 2 = {0}", S2.x);

Producción :

Structure 1 = 100
Structure 2 = 200

Primero creamos una instancia S de la estructura MyStructure y luego creamos otra copia de la misma instancia: S2. Después de eso, inicializamos los valores dentro de ambas instancias.

En la salida, obtenemos dos valores diferentes para dos copias diferentes de la instancia. Esto significa que hay dos copias separadas de la estructura MyStructure dentro de la pila. Copiar una variable de tipo de valor en otra variable crea una copia separada de todo el contenido de la variable de tipo de valor.

En el siguiente ejemplo de código, haremos lo mismo con la clase MyClass.

MyClass C = new MyClass(100);
MyClass newC = C;

newC.setx(100);
newC.setx(200);

C.show();
newC.show();

Producción :

The value of x = 200
The value of x = 200

Primero creamos una instancia C de la clase MyClass y luego copiamos esa instancia en otra instancia, newC, de la clase MyClass. Después de eso, establecemos el valor de la variable x dentro de ambas instancias con la función setx().

En la salida, obtenemos los mismos valores de la variable x dentro de ambas instancias. Esto significa que las instancias C y newC apuntan a la misma ubicación de memoria dentro del montón. Solo copia la referencia de la variable de tipo de referencia cuando copia una variable de tipo de referencia en otra variable.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Artículo relacionado - Csharp Class