martinhocosta Posted June 12, 2012 Report Share Posted June 12, 2012 boa tarde, alguém me podia ajudar em perceber como funcionam as interfaces e delegados? é que estou a estudar para uma cadeira de programação e não estou a entender. cumprimentos Link to comment Share on other sites More sharing options...
petvetbr Posted June 12, 2012 Report Share Posted June 12, 2012 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 More sharing options...
martinhocosta Posted June 13, 2012 Author Report Share Posted June 13, 2012 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 More sharing options...
petvetbr Posted June 13, 2012 Report Share Posted June 13, 2012 A interface somente determina os métodos, propriedades e eventos que uma classe deve ter. Porém você ainda precisa criar as classes que implementam a interface. Não há como instanciar uma interface diretamente. Fernando Lage Bastos - MCP/MCTS/MCPD Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now