CodeGym /Cursos /C# SELF /Criando objetos com o operador new

Criando objetos com o operador new

C# SELF
Nível 16 , Lição 2
Disponível

1. Como criar um objeto do jeito certo

O operador new em C# é tipo aquele botão mágico que transforma um "projeto" (nosso class) em uma instância real (objeto) que dá pra usar de verdade. Falando de boa: a class define o que o objeto sabe fazer e quais propriedades ele tem, e o newcria esse objeto na memória do PC.

Sem o operador new, nossas classes seriam tipo projetos sem construção: dá pra admirar, discutir, mas não dá pra pular nem derrubar café na poltrona de alcantara.

Se a class é uma receita de pizza, o operador new é o chef que faz a pizza de verdade seguindo a receita. O objeto é o resultado: a pizza na caixa, pronta pra comer.

Sintaxe

Bora ver como usar esse new poderoso. Olha o básico, se a gente tem uma class Contact:

Contact cont = new Contact();
Criando um objeto usando new
  • Contact à esquerda — é o tipo da variável que a gente tá criando.
  • cont — nome da variável (escolhe nomes que façam sentido, senão vai sofrer debugando depois).
  • new Contact() — chamada do operador new, que cria um objeto do tipo Contact.

Na memória

Quando esse código roda, o sistema operacional separa um pedaço de memória pro novo objeto e devolve uma referência (endereço) onde esse objeto "mora". Essa referência fica guardada na variável cont.

Esquema

+------------------+             +--------------------+
|  variável cont   | --------->  |   Objeto Contact   |
+------------------+             +--------------------+
          |
          |       (contém nome, telefone, email, ...)
          |
         endereço

2. Criando objetos de contatos

No exemplo anterior, a gente inventou essa class:

public class Contact
{
    public string Name;
    public string Phone;
    public string Email;
}

Agora bora criar um novo objeto do tipo Contact:


Contact friend = new Contact();
friend.Name = "Ivan Ivanov";
friend.Phone = "+1-999-123-45-67";
friend.Email = "ivan@example.com";

Console.WriteLine($"Nome: {friend.Name}, Telefone: {friend.Phone}, Email: {friend.Email}");

O que tá rolando aqui:

  1. Criamos o objeto com new Contact().
  2. Atribuímos valores pros campos dele.
  3. Mostramos os dados na tela.

Exemplo 2:

Bora adicionar mais contatos — criar outro objeto:

Contact boss = new Contact();
boss.Name = "Anastasia Sergeevna";
boss.Phone = "+1-888-765-43-21";
boss.Email = "nastya@company.com";

Console.WriteLine($"Chefe: {boss.Name}, Telefone: {boss.Phone}");

Não parece que você tá preenchendo um formulário pra cada amigo? É assim que objetos funcionam: cada instância criada ganha seus próprios valores únicos e guarda separado dos outros!

3. Usando array de objetos

Se a gente precisa guardar não só um ou dois, mas tipo dez contatos, faz sentido colocar tudo num array:


Contact[] contacts = new Contact[3];           // array pra 3 objetos

contacts[0] = new Contact();
contacts[0].Name = "Denis";
contacts[0].Phone = "+7-911-111-22-33";

contacts[1] = new Contact();
contacts[1].Name = "Maria";
contacts[1].Phone = "+7-915-123-45-67";

contacts[2] = new Contact();
contacts[2].Name = "Petr";
contacts[2].Phone = "+7-921-543-21-00";

// Mostrar todo mundo na tela
for (int i = 0; i < contacts.Length; i++)
{
    Console.WriteLine($"Contato {i+1}: {contacts[i].Name}, {contacts[i].Phone}");
}

Importante: a gente usa new pra cada elemento do array! Só criar o array não cria os objetos, só prepara espaço pras referências deles.

4. Operador new e valor padrão

Às vezes rola a dúvida — e se eu só declarar uma variável do tipo Contact, mas não atribuir um objeto com new, o que acontece?


Contact someContact;
someContact.Name = "Erro";    // Erro de compilação!

Se você escrever assim:

Contact someContact = null;

aí, se tentar acessar someContact.Name, seu programa vai "cair" com aquela exceção famosa:

System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto.

Pra não cair nessa, sempre inicialize objetos com new antes de usar.

5. Chamando o construtor

Quando você escreve new Contact(), nesse momento é chamado um método especial — o construtor. Por enquanto, nossa class não tem construtores explícitos, então é chamado o construtor padrão, que cria o objeto e preenche todos os campos com valores padrão (null pra tipos referência e zero pra números).

Na próxima aula você vai ver como criar seus próprios construtores — tipo já passar nome e telefone direto. Por enquanto, só funciona o construtor sem parâmetros.

Exemplos da vida real

Trabalhar com objetos usando o operador new é rotina de todo dev C#. Imagina:

  • Você cria um usuário no site — no código aparece um novo objeto User.
  • Abre um pedido na loja online — aparece um novo Order.
  • Registra dados de um livro — novo objeto Book.

Em qualquer programa moderno em C# você vai ver milhares de linhas com o operador new.

Memória antes de criar o objeto


            Contact firstContact; // Variável, mas não aponta pra nada
+--------------------------+
|   firstContact           |---->  null (nada!)
+--------------------------+

Depois de criar o objeto


Contact firstContact = new Contact();
+--------------------------+                 +----------------------+
|   firstContact           |---------------->|   Objeto Contact     |
+--------------------------+                 +----------------------+

6. Exemplo prático

Imagina que a gente quer deixar o usuário criar novos contatos digitando pelo teclado:


Console.WriteLine("Digite o nome:");
string name = Console.ReadLine();

Console.WriteLine("Digite o telefone:");
string phone = Console.ReadLine();

Contact newContact = new Contact();
newContact.Name = name;
newContact.Phone = phone;

Console.WriteLine($"Contato salvo: {newContact.Name}, {newContact.Phone}");

Agora, cada entrada do usuário vai criar um objeto único na memória, que dá pra guardar, mudar, mostrar — fazer o que quiser!

7. Mancadas clássicas e pegadinhas engraçadas

Erro nº1: esqueceu de chamar new antes de usar o objeto.
Se você só declara a variável e não inicializa, vai acabar com erro de compilação ou NullReferenceException na execução. Clássico: declarou o objeto — já cria com new se for usar mesmo.

Erro nº2: criou array de objetos, mas não criou os objetos.
Pegadinha comum: você cria um array do tipo Contact[], mas esquece que dentro só tem null. Tentar acessar contacts[0].Name vai dar crash. Tem que inicializar cada elemento do array: contacts[i] = new Contact();.

Erro nº3: confundiu método com propriedade.
Às vezes a galera acha que pode usar método como campo: escreve student.GetName em vez de student.GetName(). Até funciona se não usar o resultado, mas o compilador reclama se você tentar usar o "método" onde espera um valor. Sempre confere: método tem que ser chamado com parênteses, mesmo sem parâmetros.

2
Tarefa
C# SELF, nível 16, lição 2
Bloqueado
Classe simples usando o operador `new`
Classe simples usando o operador `new`
2
Tarefa
C# SELF, nível 16, lição 2
Bloqueado
Criação de um array de objetos
Criação de um array de objetos
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION