Przypisywanie delegacji

Świetny Kaczor
2016-10-08 14:25
Świetny Kaczor
0

Dlaczego można przypisać delegacji w klasie metodę operatorem "+=" a użycie "=" powoduje błąd skoro efekt byłby taki sam i poza klasą oba sposoby działają?

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

namespace Poligon
{
    public delegate void OnUjemneEventDelegate();

    public class Kontener
    {

        public event OnUjemneEventDelegate OnUjemne;
        private int x;

        public int getX()
        {
            return x;
        }

        public void setX(int arg)
        {
            x = arg;
            if(arg<0)
            {
                if(OnUjemne != null)
                {
                    OnUjemne();
                }
            }
        }
    }

    class Program
    {
        public static void Wyswietlanie()
        {
            Console.WriteLine("Przypisano wartosc ujemna!");
        }

        static void Main(string[] args)
        {
            Kontener k1 = new Kontener();

            k1.OnUjemne += Wyswietlanie;
            //k1.OnUjemne = Wyswietlanie; <- tak nie działa

            k1.setX(12);
            Console.WriteLine("x = " + k1.getX());
            k1.setX(-5);
            Console.WriteLine("x = " + k1.getX());

            Console.ReadKey();
        }
    }
}

Pozostało 580 znaków

2016-10-08 16:00
Moderator C# i .NET

Rejestracja: 7 lat temu

Ostatnio: 2 dni temu

Lokalizacja: Polska, Kraków

k1.OnUjemne += Wyswietlanie;
//k1.OnUjemne = Wyswietlanie; <- tak nie działa

Bo to nie to samo. Żeby rozjaśnić wywalmy trochę cukru składniowego:

k1.OnUjemne += new OnUjemneEventDelegate(Wyswietlanie);
k1.OnUjemne = Wyswietlanie;

Ja widać różnica jest kolosalna. No ok ale jak damy:

k1.OnUjemne = new OnUjemneEventDelegate(Wyswietlanie);

to dalej nie zadziała bo = możesz użyć tylko wewnątrz klasy Kontener. Dzięki temu nie usuniesz omyłkowo wszystkich subskrypcji tego eventa.


Yubby dibby dibby dibby dibby dibby dibby dum..
edytowany 2x, ostatnio: DibbyDum, 2016-10-08 16:02

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0