Если я правильно понимаю, ваша модель выглядит следующим образом:
Затем вы хотели бы, чтобы ClassB
связывался с Application
через ClassA
, как показанониже:
С точки зрения объектно-ориентированного проектирования это нарушает Закон Деметры , который гласит, что объекты должны общаться только со своимипрямые соседи .В связи с этим я бы предложил вам выполнить очистку в ClassA
, если это возможно.
С точки зрения реализации, я бы позволил ClassA
явно указать его зависимость от Application
, взяв его экземпляр в конструкторе.Таким образом, вы можете легко подписаться на любые события, опубликованные Application
внутри ClassA
или, потенциально, ClassB
, поскольку внутренние классы в C # могут получить доступ к закрытым членам внешнего класса :
public class A
{
private readonly Application application;
public A(Application application)
{
if (application == null)
{
throw new ArgumentNullException("application");
}
this.application = application;
this.application.ApplicationExit += application_ApplicationExit;
}
private void application_ApplicationExit(object sender, EventArgs e)
{
// Perform cleanup
}
}