Inicializadores de Objetos
Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 8 de 70.
Inicializadores de objeto fornecem uma maneira conveniente de definir valores de propriedade ao criar um objeto, sem chamar um construtor com muitos parâmetros.
Maneira tradicional usando construtor
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
Person person = new Person();
person.Name = "Alice";
person.Age = 25;
person.City = "New York";Usando a sintaxe de inicializador de objeto
Person person = new Person
{
Name = "Alice",
Age = 25,
City = "New York"
};Inicializadores de objetos com construtores
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
public Person(string name)
{
Name = name;
}
}
// O construtor define Name, o inicializador define outras propriedades
Person person = new Person("Bob")
{
Age = 30,
City = "London"
};Inicializadores de objetos aninhados
public class Address
{
public string Street { get; set; }
public string City { get; set; }
}
public class Person
{
public string Name { get; set; }
public Address Address { get; set; }
}
Person person = new Person
{
Name = "Charlie",
Address = new Address
{
Street = "123 Main St",
City = "Boston"
}
};Criando múltiplos objetos com inicializadores
Person person1 = new Person { Name = "Alice", Age = 25 };
Person person2 = new Person { Name = "Bob", Age = 30 };
Person person3 = new Person { Name = "Charlie", Age = 35 };Inicializadores de objeto tornam o código mais limpo e legível. As propriedades são definidas após a execução do construtor. Você pode usar inicializadores com ou sem parâmetros de construtor, tornando a criação de objetos flexível e concisa.
Desafio
MédioCrie três objetos Student usando diferentes abordagens de inicializador de objeto:
- student1: Use o construtor padrão com inicializador de objeto para definir todas as propriedades (Name, StudentId, Major, GPA) a partir da entrada
- student2: Use o inicializador de objeto para definir apenas Name = "Bob" e Major = "Engineering"
- student3: Use o construtor com "Charlie" como parâmetro, então use o inicializador de objeto para definir StudentId = 54321, Major = "Mathematics", GPA = 3.5
Folha de consulta
Inicializadores de objeto fornecem uma maneira conveniente de definir valores de propriedade ao criar um objeto:
Person person = new Person
{
Name = "Alice",
Age = 25,
City = "New York"
};Inicializadores de objeto podem ser combinados com construtores:
Person person = new Person("Bob")
{
Age = 30,
City = "London"
};Inicializadores de objeto aninhados permitem definir propriedades de objetos aninhados:
Person person = new Person
{
Name = "Charlie",
Address = new Address
{
Street = "123 Main St",
City = "Boston"
}
};Múltiplos objetos podem ser criados de forma concisa:
Person person1 = new Person { Name = "Alice", Age = 25 };
Person person2 = new Person { Name = "Bob", Age = 30 };Experimente você mesmo
using System;
class Program
{
static void Main()
{
string name = Console.ReadLine();
int studentId = int.Parse(Console.ReadLine());
string major = Console.ReadLine();
double gpa = double.Parse(Console.ReadLine());
// TODO: Criar student1 usando inicializador de objeto com todas as propriedades
// Use o construtor padrão e defina Name, StudentId, Major e GPA
// TODO: Criar student2 usando inicializador de objeto apenas com Name e Major
// Name deve ser "Bob", Major deve ser "Engineering"
// TODO: Criar student3 usando o construtor com o parâmetro de nome "Charlie"
// Depois use o inicializador de objeto para definir StudentId = 54321, Major = "Mathematics", GPA = 3.5
Console.WriteLine($"Student 1: {student1.Name} (ID: {student1.StudentId}) - {student1.Major}, GPA: {student1.GPA}");
Console.WriteLine($"Student 2: {student2.Name} (ID: {student2.StudentId}) - {student2.Major}, GPA: {student2.GPA}");
Console.WriteLine($"Student 3: {student3.Name} (ID: {student3.StudentId}) - {student3.Major}, GPA: {student3.GPA}");
}
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosNamespaces e DiretivasIntrodução a Classes e ObjetosA Palavra-chave 'this'Métodos e ParâmetrosCampos vs PropriedadesConstrutoresInicializadores de ObjetosRecapitulação - Calculadora Simples4Herança
Sintaxe Básica de Herança (:)A Palavra-chave 'base'Palavras-chave Virtual e OverrideClasses SeladasA Classe Base 'object'Recapitulação - Hierarquia de Funcionários7Recursos Avançados
Sobrecarga de OperadoresIndexadores (this[])Sobrescrita de ToString()Métodos de ExtensãoRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoSingleton Thread-SafePadrão FactoryPadrão Observer (Eventos)Padrão Strategy2Propriedades e Membros Estáticos
Propriedades AutoimplementadasPropriedades de Apenas Leitura/EscritaCampos e Métodos EstáticosClasses EstáticasMembros com Corpo de Expressão5Polimorfismo e Interfaces
Polimorfismo: Compilação vs ExecuçãoInterface vs Classe AbstrataMúltiplas InterfacesInterfaces ExplícitasUpcasting e DowncastingRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição sobre HerançaGenerics (Classes e Métodos)Delegates e EventosAtributos e ReflectionIDisposable e a Instrução usingFundamentos de Injeção de Dependência11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Arquitetura de Classes
Dados de Instância vs EstáticosPalavras-chave 'readonly' e 'const'Campos de SuporteRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Modificadores de AcessoPropriedades para EncapsulamentoImplementação de Ocultação de DadosPadrões de ImutabilidadeRecapitulação - Registros de Estudantes9Argumentos Variáveis
A Palavra-chave 'params'Parâmetros OpcionaisArgumentos NomeadosSobrecarga de Métodos