Ir para o conteúdo
ArturLaranja

Instâncias de classes herdadas de Form.

Mensagens Recomendadas

ArturLaranja    0
ArturLaranja

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zeroonnet    0
zeroonnet

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ArturLaranja    0
ArturLaranja

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ArturLaranja    0
ArturLaranja

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zeroonnet    0
zeroonnet

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?..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ArturLaranja    0
ArturLaranja

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zeroonnet    0
zeroonnet

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ArturLaranja    0
ArturLaranja

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
MytyMyky    0
MytyMyky

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!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

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.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade