Esempio n. 1
0
        static void Main(string[] args)
        {
            // criamos 2 objetos do tipo Account e BusinessAccont
            // os argumentos
            Account        acc  = new Account(1001, "Gilvan", 0.0);
            BusinessAccont bacc = new BusinessAccont(1002, "Lucas", 0.0, 500.0);


            Console.WriteLine("UPCASTING, que é conversão da subclasse pra superclasse");
            // Casting é converter tipo de variáveis representa em ()

            // a variavel Account recebe um objeto BusinessAccont

            Account acc1 = bacc;
            Account acc2 = new BusinessAccont(1003, "Matheus", 100.00, 500.00);
            Account acc3 = new SavingsAccount(1004, "Sandra", 50.0, 0.01);

            Console.WriteLine("DOWNCASTING, que é conversão da superclasse pra subclasse");
            Console.WriteLine("Exemplo 1 ");
            // BusinessAccont acc4 = acc2 ele mostra erro na conversão
            // vmos ter de converte()    Account em BusinessAccount
            BusinessAccont acc4 = (BusinessAccont)acc2;

            // agora posso fazer a chamada do empretimo
            acc4.Loan(100.0);
            // se eu tentar de outro jeito abaixo ele não vai mostrar o loan
            // acc2.
            Console.WriteLine("Exemplo 2 ");

            //ele mostra erro
            //BusinessAccont acc5 = acc3;
            // mesmo que eu converta com casting ele mostra sem erro
            //mais quando copilo ele mostra o erro
            //  BusinessAccont acc5 = (BusinessAccont)acc3;
            // lembre que os objetos pode ser de tipo diferente

            // temos que fazer uma tratativa
            // vamos usaar o operador is e depois as
            //testo abaixo se a varivavel acc3 é uam instancai de BusinessAccont

            if (acc3 is BusinessAccont)
            {
                // a conversão pode ser de 2 maneiras ou referência
                // BusinessAccont acc5 = (BusinessAccont)acc3;
                BusinessAccont acc5 = acc3 as BusinessAccont;

                acc5.Loan(200.0);
                Console.WriteLine("Loan");
            }

            if (acc3 is SavingsAccount)
            {
                // a conversão pode ser de 2 maneiras
                // SavingsAccount acc5 = (SavingsAccount)acc3;
                SavingsAccount acc5 = acc3 as SavingsAccount;
                acc5.UpdateBalence();
                Console.WriteLine("Update!");
            }
        }