Language: EN


Access operators in C#

The access operators ., [], and ?. allow access to members of classes, structures, and collections

Dot Operator (.)

The dot operator (.) is the most commonly used access operator in C#. It allows access to the members of a class or structure, including properties, methods, and fields.

For example, if we have this class,

public class Person
    public string Name { get; set; }
    public void Greet()
        Console.WriteLine($"Hello, I am {Name}");

We can use the dot operator . to access the Name property or the Greet() method.

Person person = new Person();
person.Name = "Carlos";
person.Greet(); // Output: Hello, I am Carlos

Index Operator ([])

The index operator ([]) is used to access elements of arrays and collections that implement an index.

Accessing elements of a collection

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

string name = names[1];
Console.WriteLine(name); // Output: Luis

In this case, the [] operator is used to access the first element of the names array.

User-Defined Indexers

public class Book
    private string[] pages = new string[100];

    public string this[int index]
        get { return pages[index]; }
        set { pages[index] = value; }

public class Example
    public void Execute()
        Book book = new Book();
        book[0] = "First page";
        Console.WriteLine(book[0]); // Output: First page

In this example, the Book class defines an indexer, allowing access to its pages using the [] operator.

Conditional Access Operator (?.)

The conditional access operator (?.) makes safe handling of null values by allowing access to members only if the object is not null.

If the object is null, the expression returns null without throwing a NullReferenceException exception. This avoids many problems.

Person person = null;
string name = person?.Name;
Console.WriteLine(name == null ? "Name is null" : name); // Output: Name is null

In this case, the ?. operator avoids an exception when trying to access the Name property of a person object that is null.

The ?. operator can be chained to handle multiple levels of access.

Person person = new Person();
string street = person?.Address?.Street;
Console.WriteLine(street == null ? "Street is null" : street); // Output: Street is null

Here, person?.Address?.Street checks each level for null before attempting to access Street.