如果从不同的类

时间:2016-12-16 07:58:05

标签: c# events

这更像是一个设计问题,我希望我能清楚地表达我的问题 我有一个复杂的过程,需要记录消息。当编写其中一些日志时,会引发一个事件,我需要对此做出响应。

问题是在此过程中从不同的类调用CreateLog方法,目前我的代码只捕获从第一个类(MyForm)引发的事件。

是否有更好的设计,我可以回应该课程中的所有事件?

希望下面的伪代码可以解释我的问题。

档案1:

Class CreateLog
{
   Log Message
   Raise event
}

文件2:

Class MyForm
{
   private CreateLog _log = new CreateLog();
   void StartProcess()
   {
       Do stuff
       Call _log.LogMessage  //1
       Call MethodB()
       Call MethodC()
   }

   void MethodB()
   { 
       Call _log.LogMessage  //2
   }

   void RespondToEvent
   {
       //Show Progress on screen
   }
}

文件2:

Class AnotherClass
{
    void MethodC()
    {
        _log2.LogMessage()  //3
    }
}

因此,当我运行它时,nr 1和2的消息日志将触发RespondToEvent()方法,但显然不是nr 3,因为它是CreateLog类的不同实例。 一种解决方案是将_log作为参数传递给MehodC,但这不是最佳解决方案。

除了将所有内容添加到1个类中之外,还有其他任何干净的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以向 AnotherClass 添加事件,并在 MethodC 中引发该事件。并在 MyForm 处理事件并调用_log.LogMessage

示例:

Class MyForm
{
    //your code

    RespondToEventFromAnotherClass()  //handles delegateToForm Event from 'AnotherClass'
    {
        Call _log.LogMessage
    }
}
Class AnotherClass
{
    Event delegateToForm;
    void MethodC()
    {
        _log2.LogMessages(); // you can Eleminate this line if it is not necessary
        Raise Event delegateToForm
    }
}