3
respostas

duvida quanto a questão?

no exercicio na opção F nao deveria ser assim, pois nu é um metodo?

public event EventHandler OnduracaoMaximaViolada();
3 respostas

Oi Everson, tudo bem?

Não, o correto é realmente:

public event EventHandler OnDuracaoMaximaViolada;

Você pode verificar isso neste programa de exemplo:

https://dotnetfiddle.net/ZZLvQQ

public class Program
{
    public static void Main()
    {
        var curso = new Curso();
        curso.OnDuracaoMaximaViolada += Curso_OnDuracaoMaximaViolada;
        curso.DuracaoMeses = 9; //violou a duração máxima (5)
    }

    public static void Curso_OnDuracaoMaximaViolada(object sender, EventArgs args)
    {
        Console.WriteLine("Duração violada!");
    }
}

Mas Acho que entendi sua dúvida. Acontece que OnDuracaoMaximaViolada está sendo declarado aqui como um evento, que precisa ser disparado para indicar que algo importante aconteceu. Mas como "disparamos" um evento? Fazemos isso usando o evento com a mesma sintaxe de um método (com parênteses):

OnDuracaoMaximaViolada(this, new EventArgs());

Mas note que OnDuracaoMaximaViolada não é um método, mas sim um evento que precisa ser invocado com parênteses.

Obrigado professor pela explicacao no video da aula sobre interface eu revi não tem essa essa parte, mas o estranho é que no excercicio que baixei da aula tem por isso q fiquei na duvida, mas obg

class Interfaces : IAulaItem
    {
        public void Executar()
        {
            <image url="$(ProjectDir)img3.png" />


            IEletrodomestico eletro1 = new Televisao();
            eletro1.Ligou += Eletro1_Ligou;

            eletro1.Ligar();

            eletro1 = new Abajur();
        }

        private void Eletro1_Ligou(object sender, EventArgs e)
        {
            Console.WriteLine("Eletro1 ligou");
        }
    }

    interface IEletrodomestico
    {
        //métodos
        void Ligar();
        void Desligar();

        //eventos
        event EventHandler Ligou;
        event EventHandler Desligou;
    }

    interface IIluminacao
    {
        //propriedades
        double PotenciaDaLampada { get; set; }
    }

    class Televisao : IEletrodomestico
    {
        public event EventHandler Ligou;
        public event EventHandler Desligou;

        public void Desligar()
        {
        }

        public void Ligar()
        {
            if (Ligou != null)
            {
                Ligou(this, new EventArgs());
            }
        }
    }

    class Abajur : IEletrodomestico, IIluminacao
    {
        public double PotenciaDaLampada { get; set; }

        public event EventHandler Ligou;
        public event EventHandler Desligou;

        public void Desligar()
        {
        }

        public void Ligar()
        {
        }
    }

    class Lanterna : IEletrodomestico, IIluminacao
    {
        public double PotenciaDaLampada { get; set; }

        public event EventHandler Ligou;
        public event EventHandler Desligou;

        public void Desligar()
        {
        }

        public void Ligar()
        {
        }
    }

    class Radio : IEletrodomestico
    {
        public event EventHandler Ligou;
        public event EventHandler Desligou;

        public void Desligar()
        {
        }

        public void Ligar()
        {
        }
    }
curso.OnDuracaoMaximaViolada += Curso_OnDuracaoMaximaViolada;

Não entendi bem essa parte, o valor default de

curso.OnDuracaoMaximaViolada

é 0? porque ele esta efetuando uma soma