Classe Object C#

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.

Resumo do conteúdo

Transcrição

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 é virtualna 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): Diagrama sobre a classe Object. Há três níveis. No nível inferior, à direita, há um quadrado representando Struct. No segundo nível, há dois quadrados: ValueType à direita e MinhaClasse à esquerda. No nível superior, há um grande quadrado representando Class Object, com três métodos de exemplo. Há uma seta que liga Struct a ValueType, uma seta que liga ValueType a Classe Object e uma seta que liga MinhaClasse a Class Object.

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!

Já é Aluno?

Comece agora

11min para conclusão

Comece a estudar agora na maior escola de tecnologia do país

Conheça os Planos para Empresas