C# - Apresentando classes internas
Da mesma forma que em Java em C# também podemos trabalhar com inner class ou classes internas. |
Você deve estar se perguntando qual seria a utilidade disto. ????
Podemos pensar em alguns cenários onde talvez precisamos definir uma coleção de variáveis ; ou funções e eventos a serem definidos e chamados usando um nome único (o nome da classe).
As classes internas são úteis por sua relação íntima com a classe externa. Dessa forma, se você precisa de um objeto que será usado apenas pela classe que você está escrevendo e por mais nenhuma outra, você não precisa escrever uma nova classe dentro do projeto, basta tornar este código uma classe interna.
Isso faz com que a classe interna tenha acesso a todas as variáveis e métodos (inclusive os privados) da classe que a contém, ou seja, a classe externa.
Abra o Visual C# Express Edition e crie um novo projeto do tipo Console Application com o nome InnerClass;
A seguir um exemplo de utilização de classe interna onde temos:
- uma classe abstrata Admin que define
dois métodos : getDetalhes() e mostraDetalhes();
- uma classe Aluno que trata a informação básica : codigo e nome
- as classe definidas dentro da classe Aluno :
- a
estrutura interna Exame que armazena detalhes de exames;
- a
classe interna Faculdade que estende a classe abstrata admin;
//classe abstrata admin
abstract class Admin
{ abstract public void getDetalhes(string x,string y); abstract public void mostraDetalhes(); } //classe Aluno ( a classe externa)class Aluno { public string codigo; public string nome; //construtor da classe Alunos public Aluno() { codigo = " "; nome = " "; } public void getDados(string str1, string str2) { codigo = str1; nome = str2; } public void Exibir() { Console.WriteLine("Aluno Codigo {0} ", codigo); Console.WriteLine("Aluno Nome {0} ", nome); } //Declara a estrutura interna para armazenar detalhes dos exames public struct Exame { public string codigoExame; public string nomeExame; public void setDetalhes(string str1, string str2) { codigoExame = str1; nomeExame = str2; } public string[] getDetalhes() { string[] temp; temp = new string[2]; temp[0] = codigoExame; temp[1] = nomeExame; return temp; } }//estrutura interna exame //Declara uma classe interna faculdade que estende a classe Admin public class Faculdade : Admin { public string fcodigo; public string fnome; public faculdade() { fcodigo = " "; fnome = " "; } //implementa o m‚todo getDetalhes public override void getDetalhes(string str1, string str2) { fcodigo = str1; fnome = str2; } //implementa o m‚todo mostraDetalhes public override void mostraDetalhes() { Console.WriteLine("\nFaculdade Codigo {0} ", fcodigo); Console.WriteLine("Faculdade Nome {0} ", fnome); } } //classe interna faculdade }//classe Aluno |
- A classe abstrata Admin é externa
a classe Alunos();
- A classe Aluno expõe somente o seu construtor e os método getDados
e Exibir ( ambos são do tipo Public);
- Todas as outras definições estão encapsuladas na classe;
- Na classe Aluno eu estou usando a classe interna
Faculdade() e a estrutura Exame() visíveis somente dentro
da classe Alunos();
Para testamos o código acima e verificar se as classes internas realmente funcionam vamos incluir o código abaixo no método Main():
static void Main(string[]
args)
{ //Instancia um objeto do tipo Aluno Aluno aluno = new Aluno();
//Instancia um objeto do tipo classe interna Faculdade Aluno.Faculdade faculdade = new Aluno.Faculdade();
//Atribuindo valores no campo publico do objeto to tipo Aluno aluno.getDados("S0089", "Macoratti");
//Exibino os conteudo do objeto Aluno aluno.Exibir();
//Invocando a fun‡Æo getDetalhes9) da calsse interna Faculdade //para por valores nos campos publicosfaculdade.getDetalhes("V0078", "Faculdades do Norte");
//Exibe os componentes da classe interna faculdade.mostraDetalhes();
//cria uma instƒncia da estrutura interna exame Aluno.Exame exame = new Aluno.Exame();
// atribuindo valores na estrutura da classe interna exame exame.setDetalhes("RT9870", "Matematica");
//exibindo o conteudo da estrutura interna exame foreach (string x in exame.getDetalhes()){ Console.Write("{0} ", x); }
//Sobrescrevendo aluno.faculdade com a classe abstrata Admin Console.WriteLine("\nSaida apos ligação tardia");
Admin adm = new Aluno.Faculdade(); adm.getDetalhes("P009", "Janice Lima"); adm.mostraDetalhes();
Console.Read(); }
|
Executando o projeto teremos:
A primeira vista pode parecer um tanto confuso mas é um recurso que um dia você pode precisar usar por isso é bom conhecer.
Até o próximo artigo .NET.
Pegue o projeto aqui: InnerClass.zip
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
C# - Tratando com Números Complexos - Macoratti
C# - Gerando números aleatórios - Macoratti
C# - Resolvendo 10 problemas de matemática em uma ... - Macora
C# - Números de Armstrong - Macoratti.net
C# - Convertendo Números para valores Reais em extenso
José Carlos Macoratti