C#: Exceções, Interfaces e Iteradores - Guia de Conceitos Fundamentais

Classificado em Computação

Escrito em em português com um tamanho de 3,78 KB

O que é uma Exceção? Como Lançar e Tratar?

Uma exceção consiste numa instância de System.Exception ou de uma classe derivada desta.

O programador pode:

  • Criar uma exceção utilizando diretamente a classe System.Exception.
  • Definir novas classes, derivadas de System.ApplicationException (Classe base reservada para exceções gerais de um programa).

Nota: Em C#, apenas podem ser lançados objetos que derivem de System.Exception.

O que são Exceções Aritméticas?

Dá-se este nome quando são ultrapassados os limites numéricos das variáveis.

Controlo de Exceções Aritméticas (Checked/Unchecked)

O C# permite obrigar ou evitar o lançamento de exceções aritméticas através das palavras-chave checked e unchecked:

  • Obrigar a lançar exceções (checked):
    uint numero = uint.MaxValue;
    checked { numero++; } // Lança exceção se houver overflow
  • Evitar exceções (unchecked):
    uint numero = uint.MaxValue;
    unchecked { numero++; } // Permite overflow silencioso

Estas palavras-chave também podem ser usadas em expressões:

uint numero = uint.MaxValue;
numero = checked(numero + 1);
numero = unchecked(numero + 1);

Interfaces em C#

Uma Interface especifica um conjunto de propriedades, métodos e eventos que uma classe deve implementar. Interfaces representam funcionalidades que uma classe suporta.

  • O nome da interface deve começar pela letra I, maiúscula.
  • Uma classe pode implementar uma ou mais interfaces.

Vantagens das Interfaces

Interfaces vs. Composição

Na composição, perde-se a capacidade de converter um objeto numa classe base e utilizá-lo independentemente das suas especificidades, algo que as interfaces facilitam através do polimorfismo.

Interfaces vs. Herança Múltipla

Em C#, não existe herança múltipla de classes. As interfaces permitem alcançar um mecanismo semelhante, pois uma classe pode implementar múltiplas interfaces.

Interfaces vs. Classes Abstratas

Ao contrário das classes abstratas:

  • Nas interfaces, não é possível declarar campos no seu interior.
  • É possível que as classes implementem mais do que uma interface.
  • É possível herdar de outra interface (A classe que implementar a interface derivada tem de implementar todos os métodos definidos).

O que são Enumeradores?

Enumeradores permitem implementar tipos de dados que podem ser utilizados com o operador foreach. Os elementos da estrutura de dados podem ser percorridos utilizando esse operador.

Mecanismos das Interfaces IEnumerable e IEnumerator

Interface IEnumerable

A interface IEnumerable permite que os objetos que a implementam sejam utilizados com o operador foreach. Pertence ao espaço de nomes System.Collections.

public interface IEnumerable {
    IEnumerator GetEnumerator();
}

Interface IEnumerator

Os objetos da interface IEnumerator são utilizados para iterar ao longo da coleção em causa.

public interface IEnumerator {
    object Current { get; }
    bool MoveNext();
    void Reset();
}

O que é um Iterador?

Um Iterador corresponde à implementação de um método que retorna uma das seguintes interfaces:

  • System.Collections.IEnumerator
  • System.Collections.IEnumerable

Entradas relacionadas: