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
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
.
El operador acceso condicional es muy útil. Ahorra muchas líneas de código y / o muchos problemas al trabajar con nulleables