2
respostas

Erro na criação de um objeto

Olá pessoal, eu adicionei uma nova classe para o projeto que estou desenvolvendo no curso de orientação à objetos em C#. Adicionei a classe Genero e relacionei na minha classe Musica conforme o código abaixo:

public class Genero
{
    public Genero(string nome, string descricao)
    {
        Nome = nome;
        Descricao = descricao;
    }

    public string Nome { get; }
    public string Descricao { get; set;}



   
}

Classe Musica

using System.Reflection.Metadata.Ecma335;

class Musica
{ 

    public Musica(Banda artista, string nome, Genero genero)
    {
        Artista = artista;
        Nome = nome;
        Genero = genero;

    }

    public string Nome { get; }
    public Banda Artista { get; }
    public int Duracao { get; set; }
    public bool Disponivel { get; set; }
    public Genero Genero { get; }  
    public string DescricaoResumida =>  //Arrow Function (LAMBDA)
        $"A música {Nome} pertence à banda {Artista}";



    public void ExibirFichaTecnica()
    {
        Console.WriteLine($"Nome: {Nome}");
        Console.WriteLine($"Artista: {Artista.Nome}");
        Console.WriteLine($"Duração: {Duracao}");
        Console.WriteLine($"Genero: {Genero.Nome}"); 
        if (Disponivel)
        {
            Console.WriteLine("Disponível no plano");
        }
        else
        {
            Console.WriteLine("Adquira o plano Plus+");
        }
    }


}


Só que no meu program, na hora de definir no argumento da criação da nova música, tá dando o seguinte erro com o 3° argumento se referindo ao Genero.

Banda queen = new Banda("Queen");

Album albumDoQueen = new Album("A night at the opera");

Musica musica1 = new Musica(queen, "Love of my life", **"Rock"**)
{
    Duracao = 213,
    Disponivel = true,

};

Musica musica2 = new Musica(queen, "Bohemian Rhapsody", **"Pop"**)
{
    Duracao = 354,
    Disponivel = false,
}; 

![](![IMAGEM DO ERRO](https://cdn1.gnarususercontent.com.br/1/1851249/b04098c8-ee9b-4667-9a33-ff3db26b2062.png)  )



albumDoQueen.AdicionarMusica(musica1);
albumDoQueen.AdicionarMusica(musica2);
queen.AdicionarAlbum(albumDoQueen);
musica1.ExibirFichaTecnica();
musica2.ExibirFichaTecnica();


queen.AdicionarAlbum(albumDoQueen);
albumDoQueen.ExibirMusicasDoAlbum();
queen.ExibirDiscografia();



Irei colocar as outras classes (Album e Banda)

Classe album

class Album 
{
    public Album(string nome)
    {
        Nome= nome;
    }

    private List<Musica> musicas = new List<Musica>();   
    public string Nome { get;}
    public int DuracaoTotal => musicas.Sum(m => m.Duracao);  
    public void AdicionarMusica(Musica musica)
    {
        musicas.Add(musica);
    }
    public void ExibirMusicasDoAlbum()
    {
        Console.WriteLine($"Lista de músicas do álbum {Nome}:\n");
        foreach (var musica in musicas)
        {
            Console.WriteLine($"Música: {musica.Nome}");
        }
        Console.WriteLine($"Para ouvir este álbum inteiro você precisa de {DuracaoTotal}");
    }
}

Classe Banda

class Banda
{
    private List<Album> albums = new List<Album>();
    public string Nome { get; }

    public Banda(string nome)
    {
        Nome= nome;
    }

    public void AdicionarAlbum(Album album)
    { 
        albums.Add(album);
    }

    public void ExibirDiscografia()
    {
        Console.WriteLine($"Discografia da banda {Nome}");
        foreach(Album album in albums)
        {
            Console.WriteLine($"Álbum: {album.Nome} ({album.DuracaoTotal})");
        }
    }
}
2 respostas

Olá Rhyann!

Pelo que entendi, você está tendo um erro ao criar um objeto da classe Musica, mais especificamente ao passar o terceiro argumento, que é do tipo Genero. O erro ocorre porque você está passando uma string ("Rock" e "Pop") em vez de um objeto da classe Genero.

Para resolver esse problema, você precisa criar um objeto da classe Genero antes de criar o objeto da classe Musica. Por exemplo:

Genero rock = new Genero("Rock", "Gênero musical com influências do blues e do country");
Genero pop = new Genero("Pop", "Gênero musical popular e comercial");

Musica musica1 = new Musica(queen, "Love of my life", rock)
{
    Duracao = 213,
    Disponivel = true
};

Musica musica2 = new Musica(queen, "Bohemian Rhapsody", pop)
{
    Duracao = 354,
    Disponivel = false
};

Dessa forma, você está passando os objetos rock e pop como argumentos para o construtor da classe Musica, que espera um objeto do tipo Genero.

Espero ter ajudado e bons estudos!

Entendi, só para comparação seria da mesma forma que a criação do meu objeto tipo "Banda", né isso?

Agora teria alguma forma de eu utilizar sem ter a necessidade de criar todo um esqueleto do objeto do tipo Genero para colocar como argumento no construtor da classe Musica?