Alura+ são pequenos vídeos com conteúdo complementar aos cursos da Alura. Aqui você tem novidades, dicas, tutoriais, novos assuntos e muito mais. Excelente para aprender algo novo naqueles pequenos momentos que sobram no dia.
Olá, tudo bom? Meu nome é André Bessa, faço parte do time de instrutores da Alura. Neste vídeo, vamos tratar da classe Object
, muito importante na plataforma .NET.
Para tratar desse assunto, vamos usar o projeto de um módulo de cliente do banco ByteBank, em que definiremos novos comportamentos para a classe Cliente
. Por exemplo, podemos exibir todas as informações de um cliente de uma vez só, em vez de chamar vários métodos de ConsoleWriteLine()
. Essa implementação é interessante, pois outros desenvolvedores do projeto também poderão utilizar essa classe de maneira mais fácil.
Com o projeto aberto no Visual Studio Community 2022, no arquivo Program.cs
, notaremos que atualmente a exibição dos dados do usuário é feita com Console.WriteLine()
, um método padrão para projetos console.
Já no arquivo Cliente.cs
, veremos que a classe Cliente
é bem simples, tem apenas suas propriedades autoimplementadas com get
e set
: CPF, nome, e-mail e idade.
Voltando ao Program.cs
, a partir da linha 3, definimos um novo objeto do tipo Cliente
e passamos informações para suas quatro propriedades:
Cliente cliente = new Cliente();
cliente.Nome = "André";
cliente.Cpf = "111.444.666-88";
cliente.Email = "andre@email.com";
cliente.Idade 23;
Na sequência, para exibir esses dados, usamos Console.WriteLine()
chamando cliente.Nome
, cliente.Cpf
e cliente.Idade
:
Console.WriteLine(cliente.Nome);
Console.WriteLine(cliente.Cpf);
Console.WriteLine(cliente.Idade);
Essa construção não está muito boa, pois estamos escrevendo três linhas de código para exibir informações do nosso objeto. Nossa meta é que o desenvolvedor consiga obter esse resultado simplesmente passando o objeto cliente
como parâmetro ao Console.WriteLine()
. Vamos adicionar essa opção na linha 13:
using ModuloCliente;
Cliente cliente = new Cliente();
cliente.Nome = "André";
cliente.Cpf = "111.444.666-88";
cliente.Email = "andre@email.com";
cliente.Idade 23;
Console.WriteLine(cliente.Nome);
Console.WriteLine(cliente.Cpf);
Console.WriteLine(cliente.Idade);
Console.WriteLine(cliente);
Ao posicionar o mouse sobre um parâmetro, é possível verificar mais informações sobre ele, como seu tipo. Nos três primeiros casos, o método Console.WriteLine()
está recebendo Nome
(string), Cpf
(string) e Idade
(inteiro). Já quando passamos cliente
como parâmetro, trata-se de um objeto — é mais complexo, porém o código não alega nenhum erro.
A classe Console
tem algumas sobrecargas do método WriteLine()
que recebem tipos diferentes, mas será que uma delas recebe o tipo Cliente
? Para investigar esse tópico, vamos acessar os metadados da classe Console
. Basta pressionar e segurar a tecla "Ctrl" e clicar sobre a palavra Console
(por exemplo, no início da linha 13).
Desse modo, abrimos os metadados da classe, onde conseguimos visualizar as propriedades e os métodos disponíveis nela. A partir da linha 1667, podemos verificar as sobrecargas do método WriteLine()
: há uma que recebe bool
, uma que recebe decimal
, outra que recebe long
e, na linha 1821, encontraremos uma sobrecarga que recebe um object
. A seguir, vamos entender melhor o que é o tipo object
.
Voltando ao Program.cs
, o Console.WriteLine()
não resulta em erro quando passamos como parâmetro um objeto completo (como cliente
), porque Cliente
é um Object
. Vamos dar uma olhada nos metadados de Object
também. Na linha 15, escreveremos "Object" e clicaremos nele, segurando a tecla "Ctrl".
Observando os metadados, notamos que a classe Object
também tem alguns métodos disponíveis. Por exemplo, na linha 22, temos public virtual bool Equals(object? obj)
— considerando nossos conhecimentos das regras de sobrecarga e sobrescrita, sabemos que esse método deve ser sobrescrito. Temos também GetHashCode()
, GetType()
, MemberwiseClone()
, ReferenceEquals()
e ToString()
.
Se nossa classe é um object
, quer dizer que temos todos esses métodos disponíveis nela! Voltando ao Program.cs
, na linha 13, vamos acrescentar um ponto após cliente
para acessar suas propriedades e métodos. Veremos Nome
, Cpf
, Email
e também ToString
, GetType
, GetHashCode
, entre outros. Ou seja, a classe Cliente
herda de Object
!
Todas as classes do . NET herdam explícita ou implicitamente da classe Object
.
Vamos remover a palavra Object
da linha 13, pois não vamos usá-la mais. Em seguida, vamos ao arquivo Cliente.cs
para fazer um teste. Na linha 9, para indicar que a classe Cliente
herda de Object
, utilizaremos o operador dois pontos (:
) seguido da classe da qual estamos herdando:
public class Cliente:Object
Note que não ocorre nenhum erro, porém essa construção é redundante, pois o compilador do C# já entende que essa classe herda de Object
. Tanto que já tínhamos aqueles métodos disponíveis (ToString
e Equals
, por exemplo). Portanto, vamos apagar :Object
.
Vamos relembrar qual era nosso objetivo inicial: usar um método para exibir todas as informações do objeto cliente
. Para tanto, após as propriedades da classe Cliente
, vamos sobrescrever o método ToString()
que é virtual
na classe Object
.
Na linha 16, basta digitarmos override
e pressionar a barra de espaço para o Visual Studio mostrar algumas sugestões de métodos para sobrescrever. Ao selecionar ToString()
, a IDE gerará automaticamente uma estrutura que chama ToString()
da classe base
, isto é, de Object
:
public override string ToString()
{
return base.ToString();
}
Para testar, vamos ao Program.cs
e passaremos cliente.ToString()
como parâmetro do Console.WriteLine()
, na linha 13:
Console.WriteLine(cliente.ToString());
Em seguida, vamos rodar a aplicação, clicando no play no menu superior do Visual Studio. O projeto será compilado e renderizado. Como resultado, serão exibidas as propriedades que passamos aos três primeiros Console.WriteLine()
seguido de "ModuloCliente.Cliente", como era mostrado anteriormente. Quando passamos um objeto para o WriteLine()
, ele invoca o método ToString()
do objeto. Como não há implementação, ele invoca da classe base
(Object
), que retorna o nome da classe.
Então, na classe Cliente
, em vez de retornar da classe base
, vamos redefinir o método ToString()
:
public override string ToString()
{
return $"Nome: {this.Nome}, \n" +
$"Email: {this.Email}, \n" +
$"Idade: {this. Idade}, \n" +
$"Cpf: {this.Cpf}";
}
A expressão
\n
serve para criar uma quebra de linha.
Assim, definimos como as informações serão exibidas, quando invocarmos o método ToString()
de Cliente
. Vamos salvar e testar, pressionando o play na parte superior do Visual Studio.
A partir da quarta linha, veremos o resultado do método ToString()
de Cliente
. Vale lembrar que, quando passamos o objeto completo para o Console.WriteLine()
, ele também invoca o ToString()
:
Nome: André,
Email: andre@email.com,
Idade: 23,
Cpf: 111.444.666-88
Então, aprendemos que existe uma superclasse do .NET chamada Object
da qual todas as classes herdam. Não somente as classes, todos os tipos do .NET também herdam de Object
, por meio da classe ValueType
! Por exemplo, um inteiro, um float
, um double
.
A Struct
que representa os inteiros (o int
), por exemplo, herda de ValueType
. Dessa maneira, o inteiro também herda de Object
pelo mecanismo da herança.
Basicamente, no .NET, temos dois tipos de objetos: por referência (onde entram nossas classes) e os ValueType
(os tipos de valor, como inteiro):
Como tem sido sua experiência aprendendo C# e orientação a objetos na Alura? Tem gostado? Não deixe de praticar bastante. Nos vemos na próxima!
11min para conclusão
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.