公共课内:
public static class LogReporting
我有以下方法:
public void RunTimerJobs()
{
SPAdministrationWebApplication centralAdmin = SPAdministrationWebApplication.Local;
try
{
foreach (SPService service in centralAdmin.Farm.Services)
{
Guid traceGuid = new Guid("d3beda82-38f4-4bc7-874f-ad45cebc9b35");
Guid eventGuid = new Guid("3ea057b3-0391-4c33-ac8d-412aecdda97d");
var traceJob =
from jobDefinition in service.JobDefinitions
where jobDefinition.Id == traceGuid
select jobDefinition;
if (traceJob != null && traceJob.Count() == 1)
{
traceJob.First().RunNow();
}
var eventJob =
from jobDefinition in service.JobDefinitions
where jobDefinition.Id == eventGuid
select jobDefinition;
if (eventJob != null && eventJob.Count() == 1)
{
eventJob.First().RunNow();
}
}
}
catch (Exception ex)
{
//Loggers.SharePointLogger logger = new Loggers.SharePointLogger();
//logger.WriteTrace(ex.Message, LogProduct.MonitoringView, LogTraceSeverity.Unexpected);
}
然而,它不允许我编译引用RunTimerJobs()
“无法在静态类中声明实例成员”
据我所知,我声明的'实例成员'都没有被标记为static
,所以设置(即静态类)只是一个基本问题,还是我错过了一些小片段? / p>
答案 0 :(得分:1)
编译器在这里很清楚。您声明了一个 static 类,而静态类只能包含 static 成员。所以这没关系:
public class NonStaticClass
{
public void InstanceMethod() {}
}
这没关系:
public static class StaticClass
{
public static void StaticMethod() {}
}
但这不是:
public static class StaticClass
{
public void InstanceMethod() {}
}
如果您想声明实例成员,为什么要将LogReporting
声明为静态类?
答案 1 :(得分:1)
当课程标记为静态时,所有成员都应该是静态的(不允许创建实例)。您可以在msdn上阅读有关静态类的更多信息。
因此,如果您想要实例(非静态)方法,请从类定义中删除 static 关键字:
public class LogReporting
{
public void RunTimerJobs()
{
//...
}
}
在这种情况下,您应该创建LogReporting
实例来调用您的方法:
LogReporting log = new LogReporting();
log.RunTimerJobs();
另一种选择 - 使您的方法静态:
public static class LogReporting
{
public static void RunTimerJobs()
{
//...
}
}
在这种情况下,您不需要LogReporting
的实例:
LogReporting.RunTimerJobs();
答案 2 :(得分:1)
您的类是静态的,因此您不能拥有任何实例成员,因为您永远不会实例化该类。
为了能够使用RunTimerJobs()
方法,您需要创建instance
类的LogReporting
,即
LogReporting logReporting = new LogReporting();
logReporting.RunTimerJobs();
这显然不会起作用,因为您的课程定义为static
而您无法创建实例。
根据您的要求,制作您的方法static
或从static
声明中删除class
关键字。
我发现您的方法中没有与实例相关的逻辑,所以将安全地标记为static
。
<强>记住强>
只要类没有标记为 static ,类就可以混合使用实例和静态成员。
和强>
当您知道所有成员(属性,方法等)也是静态的时,只将类标记为静态。
答案 3 :(得分:0)
你有没有尝试过:
public static void RunTimerJobs()
答案 4 :(得分:0)
对于静态类,成员也必须是静态的。如果您无法使成员成为静态,那么您也必须使该类非静态。
如果可以的话,使用非静态类通常是个好主意,因为静态类会增加单元测试的复杂性,因为它们不能轻易地被模拟。当然,如果你有合法的需要使用静态类,那么一定要这样做。