在主程序有一个textbox控件,用来显示一些调试的信息或错误信息,如果其它类也需要访问的话,需要把这个控件设置为public 才可以,当时这样做违背高内聚,低耦合的原则,所以使用委托代理的方式来实现,首先在主程序类中定义如下函数:
public void ShowLogInfo(string text, bool showdate = false, bool isrt = false) { string logtxt = string.Empty; if (showdate) { logtxt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", DateTimeFormatInfo.InvariantInfo) + " " + text; } else { logtxt = text; } //用delegate为了能让其它外部类也能调用 SaveLog 函数 MethodInvoker threadappend = delegate() { tb_Log.AppendText(logtxt + " "); SaveLog(logtxt,isrt); }; BeginInvoke(threadappend); Application.DoEvents(); }
假设在类 ZKAction 中需要访问这个控件,则需要声明如下的委托:(注意参数的类型和数目要一致)
//显示提示日志的委托代理事件 public delegate void OnShowZKLogInfo(string text,bool showdate=false,bool isrt=false); public event OnShowZKLogInfo ShowZKLogInfo;
然后在主程序中创建类ZKAction的对象时,就可以绑定这个事件:
public ZKAction zkaction = new ZKAction(); zkaction.ShowZKLogInfo += new ZKAction.OnShowZKLogInfo(ShowLogInfo);
这样设置后,就可以在类ZKAction的内部方法中使用 ShowZKLogInfo 来把日志显示到主程序的 textbox 中了。