static void Main(string[] args) { int NumFuncs = 8; Funcionario[] funcionarios = criaFuncionários(NumFuncs); Funcionario maria = new Executivo("Maria"); maria.setSalario(2000); maria.imprime(maria); /** * Esta chamada é válida, pois o TIPO ESTÁTICO (tipo declarado) de f1 é Funcio-nario e * o método getNome foi declarado em Funcionario. */ /** * Chamar f1.setAreaAtuacao("Suporte") é um erro, pois o * TIPO DINÂMICO (tipo do objeto referenciado) de f1 é Tecnico, * mas o tipo estático é Funcionário e setAreaAtuacao NÃO existe em Funcionario. * Assim, é preciso "forçar a barra" fazendo a "coerção" ou "type casting" ou "casting". */ // Casting para o tipo Tecnico, que é o tipo dinâmico referenciado por f1... Console.ReadKey(); }
//Método que cria uma lista de funcionários aleatoriamente... static Funcionario[] criaFuncionários(int quantos) { Funcionario[] funcs = new Funcionario[quantos]; Random gerador = new Random(); for (int i = 0; i < funcs.Length; i++) { int qual = gerador.Next(5); switch (qual) { case 0: case 1: case 2: Tecnico t = new Tecnico("Técnico " + (i + 1)); t.setAreaAtuacao("Area " + (i + 1)); t.setSalario(1000.0 * (i + 1)); funcs[i] = t; break; case 3: Gerente g = new Gerente("Gerente " + (i + 1)); g.setSalario(1000.0 * (i + 1)); funcs[i] = g; g.setBonus(2000.0); break; case 4: Executivo e = new Executivo("Executivo " + (i + 1)); e.setSalario(1000.0 * (i + 1)); e.setBonus(4000.0); string[] linguas = { "Espanhol", "Ingles" }; e.setIdiomas(linguas); funcs[i] = e; break; } // fim switch } // fim for return(funcs); }