У меня есть интерфейс для животного, и у меня есть некоторые классы, которые реализуют интерфейс.
public interface IAnimal
{
int LegCount { get; }
}
public class Dog : IAnimal
{
public int LegCount { get { return 4; } }
}
public class Octopus : IAnimal
{
public int LegCount { get { return 8; } }
}
У меня есть универсальный класс EventArgs, в котором есть экземпляр животного указанного типа.
public class AnimalRequiredEventArgs<TAnimal> : EventArgs
where TAnimal : class, IAnimal
{
public TAnimal Animal { get; set; }
}
У меня есть класс, в котором есть события, для которых требуется экземпляр животного указанного типа.
public class MyClass
{
public event EventHandler<AnimalRequiredEventArgs<Dog>> DogRequired;
public event EventHandler<AnimalRequiredEventArgs<Octopus>> OctopusRequired;
}
У меня есть класс, в котором есть обработчик событий, который устанавливает животное изуказанный тип для универсального свойства аргументов события.
public class AnimalsManager
{
private readonly IList<IAnimal> _animals =
new List<IAnimal>{new Dog(), new Octopus()};
public void OnAnimalRequired<TAnimal>(object sender, AnimalRequiredEventArgs<TAnimal> e)
where TAnimal : class, IAnimal
{
e.Animal = _animals.OfType<TAnimal>().FirstOrDefault();
}
}
Как объединить вложения обработчиков событий универсального типа, как показано ниже?
public class Program
{
public static void Main()
{
var manager = new AnimalsManager();
var mine = new MyClass();
// How can I unite these event handler attachments?
mine.DogRequired += manager.OnAnimalRequired;
mine.OctopusRequired += manager.OnAnimalRequired;
}
}