aur*_*ham 4 c# delegates properties
我需要创建一个具有两个属性的类:
这些属性(Actions <>)根据目标函数发送消息或异常.此目标函数通过属性设置.
目前,我有这个功能代码:
    public class Output
    {
        private Action<string> logOutput;
        private Action<Exception, string> exceptionOutput;
        public Action<string> LogOutput { set { this.logOutput = value; } get { return this.logOutput; } }
        public Action<Exception, string> ExceptionOutput { set { this.exceptionOutput = value; } get { return this.exceptionOutput; } }
        public Output() : this(null, null) { }
        public Output(Action<string> logAction, Action<Exception, string> exceptionAction) 
        {
            this.logOutput = logAction;
            this.exceptionOutput = exceptionAction;
        }
        public void WriteLogMessage(string format, params object[] args) 
        {
            if (this.logOutput != null)
                logOutput(string.Format(format, args));
        }
        public void WriteExceptionMessage(Exception ex, string format, params object[] args) 
        {
            if (this.exceptionOutput != null)
                exceptionOutput(ex, string.Format(format, args));
        }
    }
这是我的表单代码:
    private void MainForm_Load(object sender, EventArgs e)
    {
        // my Output object
        Output myOutput = new Output();
        // set properties
        myOutput.ExceptionOutput = this.WriteExceptionMessageToTextBox;
        myOutput.LogOutput = this.WriteLogMessageToTextBox;
        // test
        myOutput.WriteLogMessage("this is my log message to text box");
        myOutput.WriteExceptionMessage(new Exception("this is my exception"), "this is my exception message to text box");
    }
    private void WriteLogMessageToTextBox(string message)
    {
        // nothing to do here
        if (this.txtBox.IsDisposed)
            return;
        if (this.InvokeRequired)
        {
            BeginInvoke(new MethodInvoker(delegate() { WriteLogMessageToTextBox(message); }));
        }
        else 
        {
            // write to text box
            this.txtBox.AppendText(message + Environment.NewLine);
        }
    }
    private void WriteExceptionMessageToTextBox(Exception ex, string message)
    {
        // nothing to do here
        if (this.txtBox.IsDisposed)
            return;
        if (this.InvokeRequired)
        {
            BeginInvoke(new MethodInvoker(delegate() { WriteExceptionMessageToTextBox(ex, message); }));
        }
        else
        {
            string msg = "";
            msg += string.Format("Program:{0}", message);
            msg += string.Format("Message{0}", ex.Message);
            msg += string.Format("StackTrace:{0}", ex.StackTrace);
            msg += string.Format("Source:{0}", ex.Source);
            // write to text box
            this.txtBox.AppendText(msg + Environment.NewLine);
        }
    }
这个型号是对的吗?还有另一种方法吗?