C# - No argument provided that corresponds to the required formal parameter in abstract class code

Asked

Viewed 418 times

0

There’s a error of arguments provided in 3 constructors of my abstract class code, where the method get() must be written in the child classes of the employee class which are the classes Functioniomensalist and Employee.


Image for better visualization and understanding of the code diagram

inserir a descrição da imagem aqui


The following constructors of my code to be analyzed are:

  • 1 Constructor in Employee Class (Line 10, affects line 62).
  • 1 Constructor in the Working Classlist (Line 25, affects line 63).
  • 1 Employee Class Constructor (Line 44, affects line 64).

Current code

using static System.Console;

public class Funcionario
{
    public int numeroRegistro { get; set; }
    public string nome { get; set; }
    public decimal Complemento { get; set; }

    // 1º construtor
    public Funcionario (int numeroRegistro)
    {
        this.numeroRegistro = numeroRegistro;
    }

    // Deve retornar o valor de zero
    public virtual decimal obterSalarioBruto() => 0;

    public string Imprimir1() => $"Número de registro: {numeroRegistro} | Nome: {nome}";
}

public class FuncionarioMensalista : Funcionario
{
    public decimal valorSalarioMinimo { get; set; }
    public decimal quantSalarioMinimo { get; set; }

    // 2º construtor
    public FuncionarioMensalista(int numeroRegistro) : base(numeroRegistro)
    {

    }

    // valor do salario mínimo multiplicado pela quantidade de salários mínimos.
    public virtual decimal obterSalarioBruto()
    {
        decimal resultado1 = (valorSalarioMinimo * quantSalarioMinimo) + base.Complemento;
        return resultado1;
    }

    public string Imprimir2() => $"Salário mínimo: {valorSalarioMinimo.ToString("C")} | Quantidade de salário mínimo: {quantSalarioMinimo.ToString("C")}";
}

public class FuncionarioHorista : Funcionario
{
    public decimal valorHora { get; set; }
    public decimal horasTrabalhadas { get; set; }

    // 3º construtor
    public FuncionarioHorista(int numeroRegistro) : base(numeroRegistro)
    {

    }

    //  valor da hora trabalhada multiplicado pela quantidade de horas
    public virtual decimal obterSalarioBruto()
    {
        decimal resultado2 = (valorHora * horasTrabalhadas) + base.Complemento;
        return resultado2;
    }

    public string Imprimir3() => $"Valor das horas: {valorHora.ToString("C")} | Horas trabalhadas: {horasTrabalhadas.ToString("C")}";
}

public class Imprimir
{
    static int Main(string[] args)
    {
        Funcionario funcionario = new Funcionario(); // Linha afetada
        FuncionarioMensalista mensalista = new FuncionarioMensalista(); // Linha afetada
        FuncionarioHorista horista = new FuncionarioHorista(); // Linha afetada

        Write("Digite o nome do funcionário: ");
        funcionario.nome = ReadLine();
        Write($"Digite o valor do registro de {funcionario.nome}: ");
        if (!int.TryParse(ReadLine(), out int digiteregistro)) return 1;
        funcionario.numeroRegistro = digiteregistro;
        WriteLine();

        Write("Digite o valor do salário mínimo: ");
        if (!decimal.TryParse(ReadLine(), out decimal digitesalario)) return 1;
        mensalista.valorSalarioMinimo = digitesalario;
        Write("Digite a quantidade de salários mínimos: ");
        if (!decimal.TryParse(ReadLine(), out decimal digitequantidade)) return 1;
        mensalista.quantSalarioMinimo = digitequantidade;
        WriteLine();

        Write("Digite o valor da hora: ");
        if (!decimal.TryParse(ReadLine(), out decimal digitehora)) return 1;
        horista.valorHora = digitehora;
        Write("Digite a quantidade de horas trabalhadas: ");
        if (!decimal.TryParse(ReadLine(), out decimal digitehorastrabalhadas)) return 1;
        horista.horasTrabalhadas = digitehorastrabalhadas;
        WriteLine();

        WriteLine(funcionario.Imprimir1());
        WriteLine(mensalista.Imprimir2());
        WriteLine(horista.Imprimir3());
        return 0;
    }
}

3 answers

0

1) In: "There is an error of arguments provided in 3 constructs of my abstract class code" Your Functionary, Functionalist, and Functionalist classes are not abstract.

2) On the affected lines where you create the instances of Employee, Employee and Employee you are not passing the necessary argument to the constructor.

-1

public abstract class Funcionario
{
    public int numeroRegistro { get; set; }
    public string nome { get; set; }
    public decimal Complemento { get; set; }

    // 1º construtor
    public Funcionario (int numeroRegistro)
    {
        this.numeroRegistro = numeroRegistro;
    }

    // Deve retornar o valor de zero
    public virtual decimal obterSalarioBruto() => 0;

    public string Imprimir1() => $"Número de registro: {numeroRegistro} | Nome: {nome}";
}

Test this and must solve, you must decorate the class with the reserved word "Abstract".

-1

In class Funcionario, you have the virtual method, that is, it can be overwritten by classes that inherit it..

In the classes FuncionarioHorista and FuncionarioHorista you want to override base method, then you should indicate using override

Your class FuncionarioHorista should look like this:

public class FuncionarioHorista : Funcionario
{
    public decimal valorHora { get; set; }
    public decimal horasTrabalhadas { get; set; }

    // 3º construtor
    public FuncionarioHorista(int numeroRegistro) : base(numeroRegistro)
    {

    }

    //  valor da hora trabalhada multiplicado pela quantidade de horas
    public override decimal obterSalarioBruto()
    {
        decimal resultado2 = (valorHora * horasTrabalhadas) + base.Complemento;
        return resultado2;
    }

    public string Imprimir3() => $"Valor das horas: {valorHora.ToString("C")} | Horas trabalhadas: {horasTrabalhadas.ToString("C")}";
}
  • Someone explain to me why the -1?

Browser other questions tagged

You are not signed in. Login or sign up in order to post.