domingo, 24 de maio de 2009

C# - Herança

Esse post não será mais atualizado nesse blog. Para visualizar esse post em seu novo endereço, acesse:
http://milaneze.com.br/post/2009/05/24/C-Heranca.aspx


Antes de mais nada, existem alguns pontos importantes sobre herança em C#:

1 - Toda classe é derivada da classe object e a classe object é a única que não é derivada de nenhuma outra classe;

2 - C# não tem herança múltipla;

3 - O construtor de uma classe derivada sempre chama o construtor da classe base explícita ou implicitamente e depois executa seu código;

4 - O access modifier protected é usado para tornar a variável de uma determinada classe acessível somente pelas classes derivadas dela;

5 - Para sobrepôr um método de uma classe base em uma classe derivada, esse método precisa ter, depois do access modifier, a palavra-chave override e o método na classe base deve ter, por exemplo, a palavra-chave virtual.

O exemplo abaixo é mais um baseado no livro do Deitel.


Classe base:

   1:  class EmpregadoComissionado

   2:  {

   3:      private string nome;

   4:      private string sobrenome;

   5:      private string rg;

   6:      private double vendas;

   7:      private double comissao;

   8:   

   9:      public string Nome

  10:      {

  11:          get

  12:          {

  13:              return nome;

  14:          }

  15:   

  16:          private set

  17:          {

  18:              nome = value;

  19:          }

  20:      }

  21:   

  22:      public string Sobrenome

  23:      {

  24:          get

  25:          {

  26:              return sobrenome;

  27:          }

  28:   

  29:          private set

  30:          {

  31:              sobrenome = value;

  32:          }

  33:      }

  34:   

  35:      public string RG

  36:      {

  37:          get

  38:          {

  39:              return rg;

  40:          }

  41:   

  42:          private set

  43:          {

  44:              rg = value;

  45:          }

  46:      }

  47:   

  48:      public double Vendas

  49:      {

  50:          get

  51:          {

  52:              return vendas;

  53:          }

  54:   

  55:          private set

  56:          {

  57:              vendas = (value <= 0) ? 0 : value;

  58:          }

  59:      }

  60:   

  61:      public double Comissao

  62:      {

  63:          get

  64:          {

  65:              return comissao;

  66:          }

  67:   

  68:          private set

  69:          {

  70:              comissao = (value <= 0  value >= 100) ? 0 : value;

  71:          }

  72:      }

  73:   

  74:   

  75:      public virtual double SalarioGanho()

  76:      {

  77:          return Comissao * Vendas;

  78:      }

  79:   

  80:      public EmpregadoComissionado(string Nome, string Sobrenome, string RG, double Vendas, double Comissao)

  81:      {

  82:          this.Nome = Nome;

  83:          this.Sobrenome = Sobrenome;

  84:          this.RG = RG;

  85:          this.Vendas = Vendas;

  86:          this.Comissao = Comissao;

  87:      }

  88:  }

Classe derivada:

   1:  class EmpregadoComissionadoMaisSalarioBase : EmpregadoComissionado

   2:  {

   3:      private double salarioBase;

   4:   

   5:      public double SalarioBase

   6:      {

   7:          get

   8:          {

   9:              return salarioBase;

  10:          }

  11:   

  12:          private set

  13:          {

  14:              salarioBase = (value <= 0) ? 0 : value;

  15:          }

  16:      }

  17:   

  18:   

  19:      public override double SalarioGanho()

  20:      {

  21:          return base.SalarioGanho() + SalarioBase;

  22:      }

  23:   

  24:   

  25:      public EmpregadoComissionadoMaisSalarioBase(string Nome, string Sobrenome, string RG, double Vendas, double Comissao, double Salario) : base(Nome, Sobrenome, RG, Vendas, Comissao)

  26:      {

  27:          this.SalarioBase = Salario;

  28:      }

  29:  }


Aplicação das classes:

   1:  class Program

   2:  {

   3:      static void Main(string[] args)

   4:      {

   5:          EmpregadoComissionado empregado1 = new EmpregadoComissionado("Jorge", "Silveira", "23333334", 250000, 0.10);

   6:   

   7:          Console.WriteLine("Empregado 1 - Comissionado");

   8:          Console.WriteLine("Nome: " + empregado1.Nome);

   9:          Console.WriteLine("Sobrenome: " + empregado1.Sobrenome);

  10:          Console.WriteLine("RG: " + empregado1.RG);

  11:          Console.WriteLine("Valor das vendas: " + empregado1.Vendas.ToString());

  12:          Console.WriteLine("% de comissão: " + empregado1.Comissao.ToString());

  13:          Console.WriteLine("Salário total: " + empregado1.SalarioGanho().ToString());

  14:   

  15:   

  16:          EmpregadoComissionadoMaisSalarioBase empregado2 = new EmpregadoComissionadoMaisSalarioBase("Carlos", "Franco", "764840392", 170430, 0.05, 3500);

  17:   

  18:          Console.WriteLine("\n\nEmpregado 2 - Comissionado + Assalariado");

  19:          Console.WriteLine("Nome: " + empregado2.Nome);

  20:          Console.WriteLine("Sobrenome: " + empregado2.Sobrenome);

  21:          Console.WriteLine("RG: " + empregado2.RG);

  22:          Console.WriteLine("Valor das vendas: " + empregado2.Vendas.ToString());

  23:          Console.WriteLine("% de comissão: " + empregado2.Comissao.ToString());

  24:          Console.WriteLine("Salário base: " + empregado2.SalarioBase.ToString());

  25:          Console.WriteLine("Salário total: " + empregado2.SalarioGanho().ToString());

  26:   

  27:   

  28:          Console.ReadLine();

  29:      }

  30:  }

Nenhum comentário: