예제 #1
0
        static void Main(string[] args)
        {
            ContaCorrente Conta  = new ContaCorrente(1001, "Priscila", 0.0);
            ContaEspecial ContaE = new ContaEspecial(1002, "Beto", 200.00, 500.00);

            // UPCASTING
            ContaCorrente Conta1 = ContaE;
            ContaCorrente Conta2 = new ContaEspecial(1003, "Helena", 100.00, 300.00);
            ContaCorrente Conta4 = new ContaPoupanca(9001, "Heitor", 100.00, 1.0);

            //DOWNCASTING
            //ContaEspecial ContaE1 = Conta2;

            /*Não aceita, pois o compilador verifica o tipo de variável <ContaCorrente>,
             * mesmo ela recedendo dados de subtipo <ContaEspecial> */
            ContaEspecial ContaE1 = (ContaEspecial)Conta2;

            ContaE1.Emprestimo(200.00);
            //Conta2.Emprestimo(200.00); Não funciona, pois emprestimo é uma operacao da classe ContaEspecicial

            //ContaEspecial ContaE3 = (ContaEspecial)Conta4;
            // Não dara erro de compilação, mas gerará uma exceção, pois Conta4 é um objeto do Tipo ContaPoupança
            // e em tempo de execução da erro

            if (Conta4 is ContaEspecial)
            {
                //   ContaEspecial ContaE3 = (ContaEspecial)Conta4;
                ContaEspecial ContaE3 = Conta4 as ContaEspecial;
                ContaE3.Emprestimo(150.00);
            }
            if (Conta4 is ContaPoupanca)
            {
                //   ContaPoupanca ContaP = (ContaPoupanca)Conta4;
                ContaPoupanca ContaP = Conta4 as ContaPoupanca;
                ContaP.AtualizaSaldo(2.0);
            }


            Console.WriteLine("Hello World!");
        }