[英]Methods in classes in C#
我的项目中的类库中有许多不同的类。 我正在使用Quartz.NET(调度系统)来调度和加载作业,而实际的作业执行是在这些类库中完成的。 我计划有多种类型的作业类型,每种类型都有自己的类,可以在类库中执行。
我的问题是我无法在这些类中嵌套方法。 例如,这是我的课程:
public class FTPtoFTP : IJob
{
private static ILog _log = LogManager.GetLogger(typeof(HTTPtoFTP));
public FTPtoFTP()
{
}
public virtual void Execute(JobExecutionContext context)
{
//Code that executes, the variable context allows me to access the job information
}
}
如果我尝试在类的执行部分放一个方法,例如...
string[] GetFileList()
{
//Code for getting file list
}
它期望在我的GetFileList开始之前执行方法的结束,并且也不允许我访问所需的上下文变量。
我希望这是有道理的,再次感谢-你们统治
不,您不能嵌套方法。 您可以使用以下两种方法代替:
您似乎误解了类代码的工作原理?
GetFileList()
不会仅仅因为将它放在Execute()
之后的类中而Execute()
-您必须实际调用它,如下所示:
public class FTPtoFTP : IJob
{
private static ILog _log = LogManager.GetLogger(typeof(HTTPtoFTP));
public FTPtoFTP()
{
}
public virtual void Execute(JobExecutionContext context)
{
string[] files = GetFileList();
//Code that executes, the variable context allows me to access the job information
}
string[] GetFileList()
{
//Code for getting file list
}
}
还是我完全误解了您的问题?
您可以使用lambda表达式:
public virtual void Execute(JobExecutionContext context)
{
Func<string[]> getFileList = () => { /*access context and return an array */};
string[] strings = getFileList();
}
您是否要从GetFileList
函数获取结果并在Execute
使用它们? 如果是这样,请尝试以下操作:
public class FTPtoFTP : IJob
{
private static ILog _log = LogManager.GetLogger(typeof(HTTPtoFTP));
public FTPtoFTP()
{
}
public virtual void Execute(JobExecutionContext context)
{
//Code that executes, the variable context allows me to access the job information
string[] file_list = GetFileList();
// use file_list
}
private string[] GetFileList()
{
//Code for getting file list
return list_of_strings;
}
}
Execute
是一个虚拟方法,它不是用于声明其他方法的空间,它是在内部放置作业的任何逻辑,而不是用于声明新方法的名称空间。 如果要使用方法化的逻辑,只需在类定义中声明它们,然后从execute函数调用它们即可。
public virtual void Execute(JobExecutionContext context)
{
mymethod1();
mymethod2();
}
private void mymethod1()
{}
private void mymethod2()
{}
似乎您想基于一些上下文信息获取文件列表-在这种情况下,只需将参数添加到GetFileList
方法并从Execute
传递它即可:
public virtual void Execute(JobExecutionContext context)
{
string[] fileList = this.GetFileList(context);
...
}
private string[] GetFileList(JobExecutionContext) { ... }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.