C#将Class作为方法的参数并在那里调用静态方法

Jib*_*ibW 1 .net c#

我是C#的新手,并且正在寻找执行以下实现的最佳方法.

我的项目有几个Model类(比如25),每个类都有一个名为"process()"的静态方法,只需要一点时间来完成它的任务.

我需要一个接一个地调用每个类中的所有这些方法,并添加一些日志(将方法执行的写入状态写入文件)以跟踪执行.

我可以简单地做以下事情,但肯定应该有更好的专业方式来做到这一点

Log.WriteLog(DateTime.Now + " Class A Process Started");
ClassA.Process()
Log.WriteLog(DateTime.Now + " Class A Process Finished");
Log.WriteLog(DateTime.Now + " Class B Process Started");
ClassB.Process()
Log.WriteLog(DateTime.Now + " Class B Process Finished");
............ continue 25 classes
Run Code Online (Sandbox Code Playgroud)

我想要做的是编写一个方法,然后在那里添加日志和重复性工作.

private void CommonMethod(Class)
{
   Check what class
   Add Process started Log
   Call Process method
   Add proicess finished Log
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*haw 5

您可以创建接受委托并执行日志记录的函数,如下所示:

public void ProcessAndLog(Action action, String processName)
{
  Log.WriteLog(DateTime.Now + $" Class {processName} Process Started");
  action();
  Log.WriteLog(DateTime.Now + $" Class {processName} Process Finished");
}
Run Code Online (Sandbox Code Playgroud)

并称之为:

ProcessAndLog(ClassA.Process, "A"); //"A" could be part of ClassA - e.g. ClassA.Name;
ProcessAndLog(ClassB.Process, "B");
//etc
Run Code Online (Sandbox Code Playgroud)

只要每个Process方法都没有参数并且返回无效 - Action委托的签名,这将有效.

如果它有参数,你可以像这样调用它:

ProcessAndLog(() => ClassC.Process("value"), "C");
Run Code Online (Sandbox Code Playgroud)

如果您需要返回值,请考虑使用Func<T>而不是Action.