【发布时间】:2021-10-23 21:09:55
【问题描述】:
以下是委托部分的 MSDN 代码。
代码正常工作,但我想知道如何将消息输入到这个小型日志记录组件中。
哪一种是输入错误信息的正确方法?
我应该使用:Logger.WriteMessage or Logger.LogMessage
虽然两者都在屏幕上打印一条消息
Logger.WriteMessage(error_msg1);
或
Logger.LogMessage(error_msg2);
using System;
namespace DelegateTest
{
class Program
{
static void Main(string[] args)
{
string error_msg1 = "101 : Error Disk";
string error_msg2 = "104 : Error Retriving";
Logger.WriteMessage += LoggingMethods.LogToConsole;
Logger.WriteMessage(error_msg1);
Logger.LogMessage(error_msg2);
Console.Read();
}
}
public static class Logger
{
public static Action<string> WriteMessage;
public static void LogMessage(string msg)
{
WriteMessage(msg);
}
}
public static class LoggingMethods
{
public static void LogToConsole(string message)
{
Console.Error.WriteLine(message);
}
}
}
【问题讨论】:
-
委托本质上是一个函数,而不是一个组件。你不往里面放任何东西,你调用它并将你想要的数据作为参数传递,和方法一样
-
@PanagiotisKanavos 首先,感谢您帮助我。我知道委托是一个方法/函数,我使用术语组件将整个应用程序称为日志组件。顺便说一句,MSDN doc 也将其称为日志记录组件。问题是有时人们以多种方式使用委托,这使得它难以理解。我看到了其他需要分析的示例。 你能给我一个代表的实际例子吗?
-
使用 LINQ 时,所有 lambda 表达式都是
Func<>代表。委托或多或少是一个函数指针,允许您像传递数据一样传递函数。当您使用Where时,您告诉 LINQ 使用您作为参数传递给Where的委托来过滤某些项目。 -
您的代码不包含任何名为
LoggerCore的内容。很难回答您提出的具体问题。还值得注意的是,虽然您展示的代码确实使用了委托功能,但您使用的习惯用法(直接使用+=来初始化委托实例)并不是您在日常代码中看到的。委托在 .NET 代码中无处不在。它们很少以您使用它们的方式使用 -
@Flydog57 我编辑了第一篇文章。顺便说一句,这不是我的代码,而是 MSDN 文档代码。 link