Jump to content

c# interfaces e delegados


martinhocosta

Recommended Posts

Interfaces são o que se chama de contrato, ou seja uma série de características que devem ser obedecidas para por um objeto que tenha a interface. Um exemplo concreto seria por exemplo a definição de um carro, a interface de um carro por exemplo seria algo assim:

- propriedade de possuir 4 rodas

- propriedade de possuir um motor

- propriedade de possuir um cambio

- propriedade de possuir no mínimo 2 portas

- propriedade de possuir volante

- método ligar()

- método acelerar()

- método frear()

- método desligar()

A vantagem da interface é que você pode ter uma série de carros diferentes e todos possuírem as mesmas características, então por exemplo se você tem um componente Motorista, que trabalhe com a interface Carro, ele sabe que pode acelerar, frear, ligar, desligar, assim como pode contar que uma classe passada com esta interface, vai ter volante, cambio e motor por exemplo, então um pseudocódigo ficaria assim:

Classe Ferrari: ICarro

Classe VolkswagenSedan : ICarro

void Motorista(ICarro carro)

{

carro.Liga();

carro.Acelera();

carro.Freia();

carro.Desliga();

....

}

Tanto faz você passar Ferrari, como VolkswagenSedan para o método Motorista, vai funcionar igual, independente da implementação.

Delegados são um sistema relacionado, mas que se aplica a métodos ao invés de classes. O que eles permitem é passar funções como se fossem variáveis para outras funções. Por exemplo se eu tenho duas funções:

void DesenhaCirculo()
void DesenhaTriangulo()

que eu preciso passar para um outro método executar, a forma tradicional de fazer seria algo assim:

void Desenha(Forma forma)
if(forma==Circulo) DesenhaCirculo();
else if (forma==Triangulo) DesenhaTriangulo();

Agora se eu criar um delegado do tipo eu posso fazer algo assim


if(forma==Circulo)
Desenha(DesenhaCirculo)
else if(forma==Triangulo)
Desenha(DesenhaTriangulo)

no método Desenha, eu teria algo assim

void Desenha(delegadoVoid   DesenhaForma )
{
DesenhaForma();
}

Para o exemplo acima, não pode parecer muita vantagem, pois eu acesso ao código do método Desenha(), porém se eu não tiver o acesso, como por exemplo numa classe que eu comprei de terceiros e já veio compilado, porém esta classe implementar um delegado de um determinado tipo. Eu posso passar qualquer código meu para ela executar, desde que este código tenha o mesmo tipo de parâmetros e retorno. Isto permite por exemplo, se um dia eu criar uma forma Quadrado por exemplo, eu não tenha que mexer no método Desenha, eu simplesmente crio uma função DesenhaQuadrado() e passo ela para o método Desenha() e ele vai chamar ela do mesmo jeito que chama as outras.

Fernando Lage Bastos - MCP/MCTS/MCPD

Link to comment
Share on other sites

Então posso fazer alguma coisa desta forma?

public interface IValores

{

event EventHandlerVazio ficheiroLido;

event EventHandlerVazio Somado;

int valor1 { get; }

int valor2 { get; }

int resultado { get; }

void lerTxt();

void Somar();

}

ou tenho de fazer uma class para declarar o valor1 , valor2. pois estes valores veem de um txt?

cumprimentos

pois estou a usar a arquitetura MVC!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.