Para quem nao sabe, eu estou no curso de Engenharia Informática na Universidade da Madeira, pelo que a minha area principal de conhecimento é a informática (software principalmente). Interesso-me por muito mais que informatica, mas nao deixa de ser a minha vocacao.
Primeiro... o que é override?
o override é usado na programacao orientada a objectos que permite 'as subclasses a implementacao de um método que já está implementado na sua superclasse. A implementacao na subclasse substitui a implementacao na superclasse.
Pois bem, neste post vou falar sobre override no C#, devo dizer-vos que a minha experiencia de programacao nesta linguagem é quase nula. Estou muito mais familiarizado com Java. Mas estou a gostar de trabalhar com C#.
O método reescrito por uma declaracao de override é conhecido como método base. O método base tem que ter a mesma assinatura que o método do override.
Nao é possivel fazer override a um método nao virtual ou estático (static). O método base tem que ser virtual, abstract ou override.
A partir da subclasse, ainda é possivel aceder ao método com override usando a palavra chave "base". Por exemplo, se tens um metodo virtual MeuMetodo(), e um método com override numa subclasse, podes aceder o método virtual a partir da subclasse usando a chamada:
base.MeuMetodo()Exemplo:
Neste exemplo, existe uma classe base, Quadrado, e uma classe derivada, Cubo (uma superclasse e uma sublasse). Porque a area do cubo é a soma da area de seis quadrados, é possivel calcular a area chamando o metodo Area() na classe base.
using System;
class ClasseTeste
{
public class Quadrado
{
public double x;
// Constructor:
public Quadrado(double x)
{
this.x = x;
}
public virtual double Area() // verifiquem o uso de "virtual"
{
return x*x;
}
}
class Cubo: Quadrado // para quem programa em Java provavelmente notou
{ // que em C# usa-se ":" em vez de "extends"...
// Constructor:
public Cubo(double x): base(x) // e base() em vez de super()
{
}
// Chamando o método base Area (verifiquem o uso de "override"):
public override double Area()
{ // verifiquem o uso de base.Area()
return (6*(base.Area())); // muito interessante...
}
}
public static void Main()
{
double x = 5.2;
Quadrado s = new Quadrado(x);
Quadrado c = new Cubo(x);
Console.WriteLine("Area do Quadrado = ", s.Area());
Console.WriteLine("Area do Cubo = ", c.Area());
}
}
A saida do código em cima seria:
Area do do Quadrado = 27.04
Area do Cubo = 162.24
É tudo. Usei recentemente algo deste género num trabalho da universidade, achei interessante falar disto aqui. (para o pessoal da minha área, os outros saltem por cima) ;)