Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Objetos de Clase vs Objetos de Struct | Introducción a la Programación Orientada a Objetos (OOP)
C# Más Allá de lo Básico

bookObjetos de Clase vs Objetos de Struct

Los objetos de clase también pueden almacenarse en Arrays, Diccionarios y Listas al igual que los structs; sin embargo, es importante notar que los objetos de clase se pasan por referencia mientras que los objetos struct se pasan por valor.

Este concepto es importante porque pasar valores simples como int, float o double a métodos es diferente de pasar objetos y estructuras complejas a métodos. Veamos un ejemplo para comprender mejor este concepto.

Crearás un objeto struct simple y lo pasarás a un método. Cambiarás su valor desde dentro del método y observarás qué sucede con el valor del objeto original:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627
using System; // Defining a simple structure struct Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }

La salida muestra que el valor de passedObject fue actualizado mientras que el valor de originalObject permaneció sin cambios. Esto demuestra que cuando pasas un objeto struct a un método, se crea un duplicado de ese objeto y se pasa al método, o en otras palabras, se pasa por valor.

Ahora utilicemos el mismo código, solo cambiando el término struct por class:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627
using System; // Defining a simple class class Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }

Notarás que la salida ha cambiado: tanto passedObject como originalObject tienen el mismo valor esta vez. Esto demuestra que cuando se pasa un objeto de clase a un método, se pasa una referencia al objeto original dentro del método, por lo que los cambios en passedObject afectan a originalObject.

Esta propiedad también se aplica al asignar objetos a variables. A continuación se muestra un ejemplo que ilustra el comportamiento de un objeto struct:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; struct Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }

El mismo código pero esta vez para un objeto de clase:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; class Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b; b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }

1. Los objetos de clase son:

2. El siguiente código demuestra el uso de objetos de clase con listas y diccionarios. El código está explicado en los comentarios. Lea el código y elija la opción que muestra la salida correcta. El código puede ser extenso, pero es un buen ejercicio de lectura de código.

question mark

Los objetos de clase son:

Select the correct answer

question mark

El siguiente código demuestra el uso de objetos de clase con listas y diccionarios. El código está explicado en los comentarios. Lea el código y elija la opción que muestra la salida correcta. El código puede ser extenso, pero es un buen ejercicio de lectura de código.

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 5

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

Can you explain why structs are passed by value and classes by reference?

Can you provide a real-world scenario where this difference matters?

What happens if I modify a property of a class object inside a method?

Awesome!

Completion rate improved to 2.04

bookObjetos de Clase vs Objetos de Struct

Desliza para mostrar el menú

Los objetos de clase también pueden almacenarse en Arrays, Diccionarios y Listas al igual que los structs; sin embargo, es importante notar que los objetos de clase se pasan por referencia mientras que los objetos struct se pasan por valor.

Este concepto es importante porque pasar valores simples como int, float o double a métodos es diferente de pasar objetos y estructuras complejas a métodos. Veamos un ejemplo para comprender mejor este concepto.

Crearás un objeto struct simple y lo pasarás a un método. Cambiarás su valor desde dentro del método y observarás qué sucede con el valor del objeto original:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627
using System; // Defining a simple structure struct Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }

La salida muestra que el valor de passedObject fue actualizado mientras que el valor de originalObject permaneció sin cambios. Esto demuestra que cuando pasas un objeto struct a un método, se crea un duplicado de ese objeto y se pasa al método, o en otras palabras, se pasa por valor.

Ahora utilicemos el mismo código, solo cambiando el término struct por class:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627
using System; // Defining a simple class class Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }

Notarás que la salida ha cambiado: tanto passedObject como originalObject tienen el mismo valor esta vez. Esto demuestra que cuando se pasa un objeto de clase a un método, se pasa una referencia al objeto original dentro del método, por lo que los cambios en passedObject afectan a originalObject.

Esta propiedad también se aplica al asignar objetos a variables. A continuación se muestra un ejemplo que ilustra el comportamiento de un objeto struct:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; struct Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }

El mismo código pero esta vez para un objeto de clase:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; class Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b; b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }

1. Los objetos de clase son:

2. El siguiente código demuestra el uso de objetos de clase con listas y diccionarios. El código está explicado en los comentarios. Lea el código y elija la opción que muestra la salida correcta. El código puede ser extenso, pero es un buen ejercicio de lectura de código.

question mark

Los objetos de clase son:

Select the correct answer

question mark

El siguiente código demuestra el uso de objetos de clase con listas y diccionarios. El código está explicado en los comentarios. Lea el código y elija la opción que muestra la salida correcta. El código puede ser extenso, pero es un buen ejercicio de lectura de código.

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 5
some-alt