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 CarlosOperador 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: LuisEn 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
Persona persona = null;
string nombre = persona?.Nombre;
Console.WriteLine(nombre == null ? "Nombre es nulo" : nombre); // Salida: Nombre es nuloEn 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 nuloAquí, persona?.Direccion?.Calle verifica cada nivel para null antes de intentar acceder a Calle.
El operador acceso condicional es muy útil. Ahorra muchas líneas de código y / o muchos problemas al trabajar con nulleables