Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como instanciar um objeto direto no construtor que chama outra classe

Em um dos desafios de OO em C# é solicitado para criar uma classe filme e artista. Para todo filme criado, é necessário informar o título, duração e os artistas que fazem parte.

Inicialmente a lista de artistas era apenas uma lista de strings, como no exemplo abaixo:

Filme filme = new Filme("Um sonho de liberdade", 142, new List() {"Tim Robbins", "Morgan Freeman" });

Porém, ao alterar a lista para o tipo "Artista', me surgiu a dúvida em como criar esse objeto no construtor. Criar a lista vazia ou como nula não gera erros, mas não compreendi como já instanciar o objeto direto no contrutor, como por exemplo, "Filme filme1 = new("Django", 200, new List());"

Segue o código da classe Filme e Artista que estou usando:

class Filme
{
    public Filme(string titulo, int duracao, List<Artista> elenco)
    {
        this.Titulo = titulo;
        this.Duracao = duracao;
        if(elenco == null)
            Elenco = new();
        else
        {
            Elenco = elenco;
            foreach(var ator in elenco)
                ator.AdicionarFilmes(this);
        }
    }
    public string Titulo {get;set;}
    public int Duracao { get; set; }
    public List<Artista> Elenco { get; set; }
}
class Artista
{
    public Artista(string nome, int idade)
    {
        this.Nome = nome;
        this.Idade = idade;
    }
    public string Nome { get; set; }
    public int Idade { get; set; }
    public List<Filme> FilmesAtuados { get; set; }

    public void AdicionarFilmes(Filme filme) {
        if(FilmesAtuados.Contains(filme))
            System.Console.WriteLine($"O filme {filme.Titulo} já foi adicionado à filmografia de {this.Nome}");
        else
            FilmesAtuados.Add(filme);
    }
}
1 resposta
solução!

Olá! Tudo bem?

Se você quer instanciar um objeto direto no construtor, você pode fazer isso criando novos objetos da classe Artista dentro da nova lista que você está passando para o construtor do Filme. Aqui está um exemplo de como você poderia fazer isso:

Artista artista1 = new Artista("Leonardo DiCaprio", 46);
Artista artista2 = new Artista("Jamie Foxx", 53);
Filme filme1 = new Filme("Django", 200, new List<Artista>() {artista1, artista2});

Ou

Artista artista1 = new Artista("Leonardo DiCaprio", 46);
Artista artista2 = new Artista("Jamie Foxx", 53);
List<Autor> elencoDoFilme = new List<Artista> {artista1, artista2};
Filme filme = new Filme("Meu Filme", 120, elencoDoFilme);

No exemplo acima, dois novos artistas são criados e adicionados à lista de artistas passada para o construtor do Filme. Isso cria um novo filme com uma lista de artistas já preenchida.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.