Поскольку обработчики событий вызываются в том порядке, в котором вы их добавляете, основываясь на коде, который я вижу в вашем вопросе, вы не можете сделать так, чтобы обработчик mynewclass вызывался первым. Обработчик событий, который создает MyClass, всегда добавляется первым.
Одним из решений было бы управление приоритетом для обработчиков событий. Вместо использования встроенного обработчика событий + = / - = операторы, вы бы вместо этого имели методы для добавления и удаления событий, где вы могли бы явно указать порядок. Таким образом, если класс знает, что ему сначала нужно обработать событие, он может запросить это. Однако будьте осторожны, потому что вы можете легко столкнуться с ситуацией, когда несколько классов каждый настаивают на том, чтобы они сначала обработали событие.
Вот быстрый и грязный код для начала работы:
class MyClass {
private LinkedList<MyEventHandler> eventHandlers;
public enum Ordering { First, Last, ... };
public void AddHandler(MyEventHandler handler, Ordering order) {
switch(order) {
case Ordering.First:
eventHandlers.AddFirst(handler);
break;
// fill in other cases here...
}
}
public void RaiseEvent() {
// call handlers in order
foreach(MyEventHandler handler in eventHandlers)
eventHandler();
}
}