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 manejo 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 retorna null sin lanzar una excepción NullReferenceException. Lo cuál evita muchos muchos problemas.

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.