6
respostas

o comando logar fica dando erro.

Infelizmente o meu logar está aparecendo o seguinte erro :

" Severity Code Description Project File Line Suppression State Error CS1061 'SistemaInterno' does not contain a definition for 'Logar' and no accessible extension method 'Logar' accepting a first argument of type 'SistemaInterno' could be found (are you missing a using directive or an assembly reference?) ByteBank "

Teria como orientar?

6 respostas

Oi, Joana. Tudo bom?

Compartilha conosco o códigos do seu projeto?

O que este erro diz é que a classe SistemaInterno não possui nenhum método public chamado Logar.

using ByteBank.Funcionarios; using ByteBank.Sistemas; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace ByteBank { class Program { static void Main(string[] args) { CalcularBonificacao(); Console.ReadLine(); }

    public static void UsarSistema()
    {
        SistemaInterno sistemaInterno = new SistemaInterno();
        Diretor roberta = new Diretor("833.222.048-38");
        roberta.Nome = "Roberta";
        roberta.Senha = "123";

        sistemaInterno.Logar(roberta, "123");
    }

    public static void CalcularBonificacao()
    {
        GerenciadorBonificacao gerenciadorBonificacao = new GerenciadorBonificacao();

        Desenvolvedor joana = new Desenvolvedor("111.222.333.34");
        joana.Nome = "Joana";

        Designer pedro = new Designer("833.222.048-39");
        pedro.Nome = "Pedro ";

        Diretor roberta = new Diretor("833.222.048-38");
        roberta.Nome = "Roberta";

        Auxiliar igor = new Auxiliar("833.222.048-37");
        igor.Nome = "Igor";

        GerenteDeContas camila = new GerenteDeContas("833.222.048-35");
        camila.Nome = "Camila";

        gerenciadorBonificacao.Registrar(roberta);
        gerenciadorBonificacao.Registrar(pedro);
        gerenciadorBonificacao.Registrar(igor);
        gerenciadorBonificacao.Registrar(camila);
        gerenciadorBonificacao.Registrar(joana);
        Console.WriteLine("Total de Bonificação do mês " +
            gerenciadorBonificacao.GetTotalBonificacao());

    }
}

}

using ByteBank.Funcionarios; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace ByteBank.Sistemas { class SistemaInterno {

    public bool logar(Diretor funcionario, string senha)
    {

        bool UsuarioAutenticado = funcionario.Autenticar(senha);

        if (UsuarioAutenticado)
        {
            Console.WriteLine("Bem-vindo ao Sistema!");
            return true;
        }
        else
        {
            Console.WriteLine("Senha Incorreta!");
            return false;
        }
    }
}

}

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace ByteBank.Funcionarios { public class Diretor : Funcionario {

    public string Senha { get; set; }

    public Diretor(String cpf): base(8000, cpf)
    {
        Console.WriteLine("Criando Diretor!");
    }

    public bool Autenticar(string senha)
    {
        return this.Senha == senha;


                                           /* if (this.Senha == senha)
                                            {
                                                return true;
                                            }
                                            else
                                            {
                                                return false;
                                            }*/
    }

    public override void AumentarSalario()
    {
        Salario *= 1.15; 
    }

    public override double GetBonificacao()
    {
        return Salario * 0.5;
    }
}

}

Acho que resolvi o problema do logar, rs, mas agora to com problema no autenticar. Consegue me ajudar?

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace ByteBank.Funcionarios { public class GerenteDeConta : Funcionario { public GerenteDeConta(string cpf) : base(4000, cpf) { Console.WriteLine("Criando GERENTE DE CONTAS"); }

    public string Senha { get; set; }

    public new bool Autenticar(string senha)
    {
        return Senha == senha;
    }

    public override void AumentarSalario()
    {
        Salario *= 1.05;
    }

    public override double GetBonificacao()
    {
        return Salario * 0.25;
    }

}

}

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace ByteBank.Funcionarios { public class Diretor : Funcionario { public Diretor(string cpf) : base(5000, cpf) { Console.WriteLine("Criando DIRETOR"); }

    public string Senha { get; set; }

    public new bool Autenticar(string senha)
    {
        return Senha == senha;
    }

    public override void AumentarSalario()
    {
        Salario *= 1.15;
    }

    public override double GetBonificacao()
    {
        return Salario * 0.5;
    }
}

}

using ByteBank.Funcionarios; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace ByteBank.Sistemas { public class SistemaInterno {

    public bool Logar(Diretor Funcionarios, String senha)
    {
        bool usuarioAutenticado = Funcionario.Autenticar(senha);

        if (usuarioAutenticado)
        {
            Console.WriteLine("Bem-Vindo ao Sistema!!");
            return true;
        }
        else
        {
            Console.WriteLine("Senha Incorreta");
            return true;
        }
    }

    public bool Logar(GerenteDeConta Funcionarios, String senha)
    {
        bool usuarioAutenticado = Funcionario.Autenticar(senha);

        if (usuarioAutenticado)
        {
            Console.WriteLine("Bem-Vindo ao Sistema!!");
            return true;
        }
        else
        {
            Console.WriteLine("Senha Incorreta");
            return true;
        }

 }
}

}

using ByteBank.Funcionarios; using ByteBank.Sistemas; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace ByteBank { class Program { static void Main(string[] args) { //CalcularBonificacao();

        UsarSistema();
        Console.ReadLine(); 

    }

    public static void UsarSistema()
    {
        SistemaInterno sistemaInterno = new SistemaInterno();

        Diretor roberta = new Diretor("159.753.398-04");
        roberta.Nome = "Roberta";
        roberta.Senha = "123";

        Funcionario camila = new GerenteDeConta("326.985.628-89");
        camila.Nome = "Camila";
        camila.Senha = "abc";

        sistemaInterno.Logar(roberta, "123");
        sistemaInterno.Logar(roberta, "abc");


    }

    public static void CalcularBonificacao() 
    {
        GerenciadorBonificacao gerenciadorBonificacao = new GerenciadorBonificacao();

        Funcionario pedro = new Designer("833.222.048-39");
        pedro.Nome = "Pedro";

        Funcionario roberta = new Diretor("159.753.398-04");
        roberta.Nome = "Roberta";

        Funcionario igor = new Auxiliar("981.198.778-53");
        igor.Nome = "Igor";

        Funcionario camila = new GerenteDeConta("326.985.628-89");
        camila.Nome = "Camila";

        Desenvolvedor guilherme = new Desenvolvedor("456.175.468-20"); 
        guilherme.Nome = "Guilherme"; 

        gerenciadorBonificacao.Registrar(guilherme);
        gerenciadorBonificacao.Registrar(pedro);
        gerenciadorBonificacao.Registrar(roberta);
        gerenciadorBonificacao.Registrar(igor);
        gerenciadorBonificacao.Registrar(camila);

        Console.WriteLine("Total de bonificações do mês " +
            gerenciadorBonificacao.GetTotalBonificacao());
    }
}

}

Você usou o modificador new na definição do método Autenticar:

public new bool Autenticar(string senha)
{
    return Senha == senha;
}

Quando você usa o new desta forma, você não tem os benefícios do polimorfismo e sobrescrita de métodos. Essa implementação de Autenticar só vai funcionar em variáveis que são exatamente do tipo (nome da classe) que você definiu o método new bool Autenticar.

Por exemplo:

using System;

class ClasseMae
{
    public virtual void Metodo()
    {
        Console.WriteLine("ClasseMae");
    }
}

class ClasseFilha : ClasseMae
{
    public new void Metodo()
    {
        Console.WriteLine("ClasseFilha");
    }
}

// Programa inicia aqui
class Program
{
    static void Main(string[] args)
    {
        ClasseMae a = new ClasseMae();
        a.Metodo(); // Escreve "ClasseMae"

        ClasseFilha b = new ClasseFilha();
        b.Metodo(); // Escreve "ClasseFilha"

        ClasseMae c = new ClasseFilha();
        c.Metodo(); // Escreve "ClasseMae"!

        Console.Read();
    }
}

Ficou faltando você dizer ao compilador que o método Autenticar na classe Funcionario pode ter seu comportamento sobrescrito!

Para tal, altere o cabeçalho de Autenticar da classe Funcionario para virtual:

public class Funcionario
{
    // ...
    public virtual bool Autenticar(string senha) 
    // ...
}

E então nas classes filhas, troque o public new bool Autenticar por public override bool Autenticar.

Funcionou? O que você acha?

Fico no aguardo, abs.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software