csharp-operadores-acceso

Operadores de acceso en C#

Los operadores de acceso ., [], y ?. permiten acceder a miembros de las clases, estructuras, y colecciones

Operador de punto (.)

El operador de punto (.) es el operador de acceso más utilizado en C#. Permite acceder a los miembros de una clase o estructura (incluyendo propiedades, métodos y campos)

Por ejemplo, si tenemos esta clase,

public class Persona
{
    public string Nombre { get; set; }
    public void Saludar()
    {
        Console.WriteLine($"Hola, soy {Nombre}");
    }
}

Podemos usar el operador punto . para acceder a la propiedad Nombre o al método Saludar().

Persona persona = new Persona();
persona.Nombre = "Carlos";
persona.Saludar(); // Salida: Hola, soy Carlos

Operador de Índice ([])

El operador de índice ([]) se utiliza para acceder a los elementos de arrays y colecciones que implementan un índice.

Acceso a elementos de una colección

string[] nombres = { "Ana", "Luis", "Pedro" };

string nombre = nombres[1];
Console.WriteLine(nombre); // Salida: Luis

En este caso, el operador [] se usa para acceder al primer elemento de la matriz numeros.

Indexadores definidos por el usuario

public class Libro
{
    private string[] paginas = new string[100];

    public string this[int indice]
    {
        get { return paginas[indice]; }
        set { paginas[indice] = value; }
    }
}

public class Ejemplo
{
    public void Ejecutar()
    {
        Libro libro = new Libro();
        libro[0] = "Primera página";
        Console.WriteLine(libro[0]); // Salida: Primera página
    }
}

En este ejemplo, la clase Libro define un indexador, permitiendo el acceso a sus páginas utilizando el operador [].

Operador de acceso condicional (?.)

El operador de acceso condicional (?.) facilita el trabajo seguro de valores nulos al permitir el acceso a miembros solo si el objeto no es null.

Si el objeto es null, la expresión simplemente retorna null, sin lanzar una excepción NullReferenceException

El operadora condicional es muy útil. Ahorra muchas líneas de código y / o muchos problemas al trabajar con nulleables ::

Persona persona = null;
string nombre = persona?.Nombre;
Console.WriteLine(nombre == null ? "Nombre es nulo" : nombre); // Salida: Nombre es nulo

En este caso, el operador ?. evita una excepción al intentar acceder a la propiedad Nombre de un objeto persona que es null.

El operador ?. puede ser encadenado para manejar múltiples niveles de acceso.

Persona persona = new Persona();
string calle = persona?.Direccion?.Calle;
Console.WriteLine(calle == null ? "Calle es nulo" : calle); // Salida: Calle es nulo

Aquí, persona?.Direccion?.Calle verifica cada nivel para null antes de intentar acceder a Calle.