martinhocosta Posted June 12, 2012 at 01:44 PM Report Share #462194 Posted June 12, 2012 at 01:44 PM 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 at 06:39 PM Report Share #462338 Posted June 12, 2012 at 06:39 PM 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 at 12:35 PM Author Report Share #462449 Posted June 13, 2012 at 12:35 PM 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 at 12:55 PM Report Share #462453 Posted June 13, 2012 at 12:55 PM 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