Czy eventy to składowe prywatne ?

0

Przeczytałem, że zmienne delegatów są deklarowane jako prywatne jeśli korzystać się z eventów (zdarzeń), więc dlaczego można tak jak poniżej odwołać się bezpośrednio przez operator kopki do eventu AboutToBlow skoro jest on prywatny ?

c1.AboutToBlow += new Car.CarEngineHandler(CarIsAlmostDoomed)

W klasie Car jest zdefiniowany delegat o nazwie CarEngineHandler, a metoda którą chcę wpisać do delegata to CarIsAlmostDoomed.

2

Gdzie tak przeczytałeś?
To czy event jest publiczny czy prywatny zależy od tego z jakim modyfikatorem dostępu został zdefiniowany. Prywatne eventy stosuje się raczej chyba dość rzadko, mi się chyba jeszcze nigdy nie zdarzyło.

0

Ale eventy od razu generują metody do dodawania i usuwania metod do delegata, prawda ?

0

Nieprawda.

Główna (jedyna?) różnica między polem

public SomethingEventHandler SomethingHappened;

a eventem

public event SomethingEventHandler SomethingHappened;

jest taka, że w pierwszym przypadku można z zewnątrz oprócz operatorów += i -= użyć także =, „psując” delegata, czyli zabierając mu ewentualnie istniejące już handlery.
Dodanie słowa event blokuje operator =.
Tyle.

Zarówno event jak i pole mogą być publiczne, prywatne, i jakie tam jeszcze są.

Delegat to typ. Event to rodzaj elementu składowego klasy, podobnie jak pole (field) i właściwość (property). Pytanie czym się różni event od delegata to tak jakby pytać czym się różni property od inta.

0

@Azarien
nie masz racji z paroma rzeczami:

0

W książce język c# 2010 i platforma .net 4.0 było napisane, że event generuje automatycznie metody dodawania i usuwania metod do delegata to już nie wiem kto ma rację.

0
Uczynny Jeleń napisał(a):

W książce język c# 2010 i platforma .net 4.0 było napisane, że event generuje automatycznie metody dodawania i usuwania metod do delegata to już nie wiem kto ma rację.

To jest po prostu funkcjonalność delegata, że **umożliwia **dodawanie, odejmowanie metod które mają być wywoływane.

0
Uczynny Jeleń napisał(a):

W książce język c# 2010 i platforma .net 4.0 było napisane, że event generuje automatycznie metody dodawania i usuwania metod do delegata to już nie wiem kto ma rację.

Tak, generuje automatycznie. Możesz nie korzystać z tych automatycznych i zdefiniować swoje przy użyciu słów kluczowych add i remove: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/add

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