gpt4 book ai didi

c# - 从类中将项目添加到日志窗口的最佳方法

转载 作者:行者123 更新时间:2023-11-30 12:39:52 25 4
gpt4 key购买 nike

我正在尝试将来 self 的类(class)的“日志”消息添加到我表单上的 ListBox 中。在表单中,我只能使用 lblog.add("message"),但是当我试图清理我的代码时,将“消息”传递给的最佳方式是什么前端?

我找到了一个建议,有下面的代码,但想知道是否有更简单的方法?

表格:

// This is all required so that we can call the function from another class 
public void publicLogMessage(string message)
{
if (InvokeRequired)
{
Invoke(new OutputDelegate(logMessage), message);
}
}

public delegate void OutputDelegate(string message);

public void logMessage(string message)
{
lblog.Items.Add(DateTime.Now + " " + message);
}

类:

//This is required so that we can call the "PublicLogMessage" function on the main form
public frmMain formToOutput;

public speechRecognition(frmMain f)
{
formToOutput = f;
}

用法:

formToOutput.logMessage

最佳答案

现在您的算法和输出方法之间的耦合非常紧密。您的算法了解您的输出方法(例如,它是具有特定签名的表单)。

我建议将其解耦:

private readonly Action<string> log;    

public speechRecognition(Action<string> log)
{
this.log = log;
}

public void DoWork()
{
this.log("work started");

// ...

this.log("work in progress");

// ...

this.log("work ended");
}

此类对日志记录方法一无所知。它只知道它得到一个字符串。控制输出方法(表单)和算法(上面的类)的类可以将它们链接在一起:

var form = new YourFormWithLoggingWindow();

var algorithm = new speechRecognition(form.publicLogMessage);

现在算法将记录到表单中。您可以使用

调用它
var algorithm = new speechRecognition(Console.WriteLine);

它会在控制台应用程序中记录到控制台。该算法不关心也不需要您的表单来编译。它是独立的。您的表格也不知道该算法。它也是独立的。

您甚至可以进行检查日志记录的单元测试:

var log = new List<string>();
var algorithm = new speechRecognition(log.Add);

algorithm.DoWork();

Assert.AreEqual(log.Count, 3);

关于c# - 从类中将项目添加到日志窗口的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43734606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com