public static void TotalDeTributoDeImportados(Produto [] produtos, TotalizadorDeTributoProdutoImportado TTProdutoImportado) { foreach (Produto produto in produtos) { if (!(produto is ProdutoNacional)) /*verificando se o objeto não é um ProdutoNacional */ { /*caso não seja um produto nacional é realizado um casting da variavel produto*/ ITributoDeProdutoImportado produtoImportado = produto as ITributoDeProdutoImportado; TTProdutoImportado.AcumuladorDeTributoProdutoImportado(produtoImportado); /* No nosso caso apenas a classe ProdutoNacional não implementa a interface ITributoDeProdutoImportado, portanto os demais objetos * são ITributoDeProdutoImportado por isso é feito o casting acima.*/ } } }
/* Qualquer classe que implemente a interface ITributoDeProdutoImportado é tributavel de taxa de importação. * A variavel produto do tipo ITributoDeProdutoImportado pode fazer referencia a um objeto de uma classe que implementou a interface ITributoDeProdutoImportado. * /*Desta forma, podemos dizer que a classe TotalizadorDeTributoProdutoImportado recebe um ITributoDeProdutoImportado * qualquer. O polimorfismo funciona com interface. * * A interfcace é a classe pai e as classes que a implementaram são as filhas*/ public void AcumuladorDeTributoProdutoImportado(ITributoDeProdutoImportado produto) { AcumuladorTributoProdImportado += produto.CalcularTributoDeImportacao(); }