• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ArturLaranja

Instâncias de classes herdadas de Form.

18 mensagens neste tópico

Boa tarde a todos. Tenho alguma urgência na resolução desta dúvida:

Eu tenho uma classe XPTO com vários métodos. Dentro de um dos métodos tenho um conjunto de IF's que me criam 3 variáveis chamadas "cabecalho", "corpo" e "rodape".

Consoante o fluxo dos IFs essas três variáveis podem ser instâncias da classes Classe1, ou Classe2, ou Classe3, ou Classe4, etc, etc, etc, etc (classes todas derivadas da classe Form). Depois de sair do IF quero na mesma aceder a essas três variáveis. Não consigo porque variáveis definidas dentro do IF não são reconhecidas cá fora. Possível solução: criar as três variáveis cá fora (antes do IF) todas do tipo Form e depois fazer dentro de cada IF um cast para Classe1, Classe2, Classe3... mas isso não resulta porque quando chamo métodos especificos da Classe1, ou Classe2, ou Classe3... o compilador diz que esses métodos não estão definidos na classe Form o que é parvo porque se eu fiz um cast não devia dizer isso...

Como resolver isto?

Obrigado

ArturLaranja

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Colocas cá fora a variavel vazia só. e dentro dos if's inicializas as variaveis. Assim dá decerteza. cá fora mete as variaveis como VAR nao metas form nem nada do genero e depois inicializas como derivada da form dentro dos if's.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, mas em .NET 2.0 não existe a keyword VAR... pelo menos está a dar erro... :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah pois sei que na 3.5 existe :P pensei que também existia.

Entao tipo mete do tipo que tu vais inicializar....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso não dá pq eu so sei o tipo que vou inicializar dps do fluxo entrar nos IF's...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu só não percebo porque é que fazendo um cast da variável (do tipo Form) para o tipo que eu quero (Classe1, Classe2, Classe3, etc que são herdadas de Form) ele continua a assumir que a variável é do tipo Form... dassssssssss.................. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código é grande e não vai adiantar nada veres... já o tenho todo cheio de lixo agora!

Diz-me uma outra coisa, qual é a keyword em C# que me permite definir métodos em classes com herança que me obrigue a implementar os mesmos métodos em classes herdadas?

No fundo é criar um interface ou classe abstracta no JAVA, mas em c#.

Obrigaod

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

c# também tem classes abstractas e interfaces se é isso que pertendes. E se as classes sao herdadas os metodos passam automaticamente ou não?..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Passam... a questão é que podes, na classe mae, definir metodos que têm de ser implementados obrigatoriamente em todas as classes filhas que herdam da mae! No Java sei como se faz... em C# nao sei... Ja tenho isto demasiado embrulhado e já estou a mexer em código de ha 1 ano tras... dass! :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah ok isso ai já não sei como se faz e não tenho aqui o livro para ver isso :S Sorry.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois também era o que tava a pensar mas como disse nunca me foi necessário fazer isso. Mas ainda bem que já está resolvido :P

Fiquem Bem

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Resolvido nao está... voltei ao problema inicial... fdx... isto deve ser algum bug da plataforma...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu nao estas a perceber e eu estou a ficar queimado com a programação... já faltou mais para me reformar desta porcaria!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes fazer isso de duas formas, basicamente -- ou com abstracts, ou com interfaces. tens é de definir correctamente as bases.

No caso da interface, defines uma interface (vou chamar aqui ICustForm) com um método (ou vários) que Classe1, Class2, e Classe3 devem implementar (derivam dele e implementam a interface...).

Antes da sequência de IFs defines as variáveis do tipo ICustForm:

ICustForm cabecalho;
ICustForm corpo;
ICustForm footer;

dentro dos Ifs inicializas consoante precisares:

cabecalho = new Classe1(...);
(...)
corpo = new Classe2(...);
(...)

Fora dos Ifs, acedes à Info via o método que definiste (imagina que se chamava Print()):

cabecalho.Print();
corpo.Print();
(...)

Assim, cada um dos objectos têm um método comun que podem ter modos de processamento diferentes.

Em termos de abstracts, é practicamente a mesma coisa, só muda as declarações dos métodos em Classe1, 2 e 3 , que devem ter o "override"

Escrevi um pequeno exemplo para demonstrar os dois e corre no SnippetCompiler (recomendo a toda a gente! http://www.sliver.com/dotnet/SnippetCompiler/):

http://miguelalho.com/wp-content/uploads/2008/08/abstracttest.zip

Espero que ajude!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

criar as três variáveis cá fora (antes do IF) todas do tipo Form e depois fazer dentro de cada IF um cast para Classe1, Classe2, Classe3... mas isso não resulta porque quando chamo métodos especificos da Classe1, ou Classe2, ou Classe3... o compilador diz que esses métodos não estão definidos na classe Form o que é parvo porque se eu fiz um cast não devia dizer isso...

Não é parvo. Se tens a variável definida como Form fora do if, não podes aceder directamente a métodos das classes derivadas, precisas de fazer cast no sítio onde lhe tentas aceder, algo do género ((Classe1)cabecalho).Print();.

Não percebi o que queres dizer com "fazer dentro de cada IF um cast para Classe1, Classe2, Classe3". Podes mostrar como estás a fazer o cast? Penso que está algo errado na forma como estás a abordar a situação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora