Tópicos Diversos em C# Erick Luis Moraes de Sousa [email protected] http://forum.gamux.com.br REVISÃO Revisão • Orientação a Objetos: - – – – – – – – Classe; Objeto/Instância; Método; Construtor; Propriedade; Herança; Modificadores de Acesso; Adendo • Sobrecarga de métodos ( overloading/overriding ): – Processo de re-implementação de um método/operador em uma subclasse; • Modificadores de Acesso para a herança: – Virtual: - • Métodos/propriedades que possuem o modificador Virtual podem ser re-implementados ao serem herdados por subclasses; – Abstract: • Métodos/propriedades que possuem o modificador Abstract não precisam ser implementados na superclasse e devem ser obrigatoriamente implementados na subclasse caso a superclasse tenha o modificador abstract; – Sealed: • Não é possível herdar de uma classe/método/propriedade que esteja com o modificador sealed; – Override: • Esse modificador de acesso, quando utilizado em uma subclasse, permite re-implementar métodos da superclasse; OBJETIVOS Objetivos • Diferença entre valor e referência em C#; • Delegates; • Tratamento de Exceções. 7 Teoria Prática Teoria Valor e Referência Conceito Exceções Usos Delegates Conceito • Valor: • Quando uma variável é passada para um método por valor, o sistema operacional cria uma cópia da mesma que é a utilizada pelo método. Modificações nesta cópia não alteram a variável original; • Referência: • Quando uma variável é passada por referência para um método, o sistema operacional não cria uma cópia. Caso a mesma sofra alguma modificação dentro do método, as mudanças irão se manter e alterar a variável “original”; • Objetos são passados como referência por padrão; • Structs são passadas como valor por padrão; • Keyword específicas: ref , out. 10 Usos • Keyword ref: – Um valor é passado como referência e seu valor deve necessariamente ser inicializado; • Keyword out: – Um valor é passado como referência, porém o seu valor não precisa ser inicializado; • Declaração de um método que recebe um inteiro i por referência: public void meuMetodo ( ref int i ) { i++; } • Análogo para a keyword out. 11 Teoria Valor e Referência Exceções Utilidades e Motivações Delegates Try/Catch Utilidades e Motivações 13 Utilidades e Motivações • Principal objetivo: • Verificar erros em tempo de execução que fariam com que o seu programa terminasse de forma inesperada; • Um olhar na linguagem C: • Não possui tratamento de exceções; • Casos excepcionais são tradados a parte: • • • Retorno do Malloc; Tentativa de abrir um arquivo; Divisão por zero; • Garante um programa mais robusto e estável! 14 Try/Catch • Tenta executar um trecho de código que possa causar uma exceção; • Se o código gerar alguma exceção, o programa não é abortado. O mesmo continua a ser executado normalmente; • Utilizando o try/catch: try { //Trecho de código que pode gerar a exceção; } catch ( nomeDaExceção nome ) { // Lógica para tratar a exceção }; 15 Teoria Valor e Referência Exceções Delegates Descrição Declaração Descrição • De forma simplificada, um delegate é uma referência ( um ponteiro ) para um ou mais métodos; • Em C, um delegate seria um ponteiro para uma função! • Permite que métodos sejam passados como parâmetros em funções; • Os parâmetros e o tipo de retorno de um delegate devem ser iguais aos da(s) função(ões) que ele referencia; 17 Declaração • Vamos supor que temos uma classe chamada Add, com o seguinte pragma: • public float Add ( float a , float b ); • Para criar um delegate desse método, fazemos da seguinte maneira: • delegate float nomeDoDelegate ( float x , float y ); • O nome dos parâmetros não precisa ser o mesmo, apenas os tipos; • Instancializando um delegate e atribuindo o método Add: • nomeDoDelegate nome = new delegate(new); 18 Teoria Prática Prática • Continuar/Começar a implementar o Space Invaders; • Implementar um Breakout; • Montar um jogo para participar do campeonato e-games; • Implementar um Asteroids; • Montar um grupo para desenvolver algum jogo mais complexo. 20 Futuro • Escolher o próximo curso; • Sugestões de cursos e tópicos que deveriam ser abordados; • Micro-Avaliação de curso online; 21 Agradecimentos public class principal { public abstract void fim(); } public class palestra : principal { public override void fim() { Console.WriteLine ( “Obrigado!\n” ); } } 22