Предположат, мы имеем следующую структуру класса:Слушайте конкретные события унаследованных классов
public class Fruit
{
public event EventHandler<RipeEventArgs> Ripe;
}
public class Apple:Fruit
{
public event EventHandler<FallEventArgs> FallFromTree;
}
public class Farm
{
List<Fruit> fruits;
}
public class Farmer
{
private Farm myFarm;
public Farmer()
{
// listen to all FallFromTree events coming from the farm
myFarm.WHAT += AppleFallen;
}
public void AppleFallen(object sender, FallEventArgs e) {}
}
Вопрос: Как я могу убедиться, что фермер может прослушивать все события FallFromTree от любого яблока на ферме и любое яблоко, которое будет создано в будущем?
Я думал о раздувании событий отдельно, но это означало бы, что Farm
должно определять каждое событие, которое также покрывается Apple
. Проблема в том, что я создам много разных фруктов с разными событиями, и важно, чтобы какой-то особый фермер мог слушать только определенные события, происходящие из фермы. Поэтому определение каждого нового вида события в Farm
не похоже на решение для меня.
Это домашнее задание? –
Нет, я пытаюсь найти способ НЕ создавать огромный класс «Фарм». – Marnix
Почему бы просто не добавить перечисление, описывающее все, что может заинтересовать фермер. Это не отличается от фермера, который должен знать о конкретных событиях фруктов. Но с большим преимуществом, что вам сейчас нужно только одно событие. –