0

public クラスの内部:

    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ん。 (つまり、静的クラス)または小さなスニペットがありませんか?

4

5 に答える 5

1

クラスは静的であるため、クラスをインスタンス化することはないため、インスタンス メンバーを持つことはできません。

メソッドを使用できるようにするには、クラスのRunTimerJobs()を作成する必要があります。instanceLogReporting

LogReporting logReporting = new LogReporting();
logReporting.RunTimerJobs();

staticただし、クラスがとして定義されており、そのインスタンスを作成できないため、これは明らかに機能しません。

必要に応じて、メソッドを作成するか、宣言からキーワードをstatic削除します。staticclass

メソッドにインスタンス関連のロジックが表示されないためとしてマークしても安全staticです。

覚えて

クラスがstaticとマークされていない限り、クラスにはインスタンス メンバーと静的メンバーを混在させることができます。

すべてのメンバー (プロパティ、メソッドなど) も静的であることがわかっている場合にのみ、クラスを静的としてマークします。

于 2012-12-06T20:54:22.137 に答える
1

コンパイラはここでかなり明確です。静的クラスを宣言していますが、静的クラスには静的メンバーのみを含めることができます。だからこれは大丈夫です:

public class NonStaticClass
{
    public void InstanceMethod() {}
}

そして、これは大丈夫です:

public static class StaticClass
{
    public static void StaticMethod() {}
}

しかし、これはそうではありません:

public static class StaticClass
{
    public void InstanceMethod() {}
}

LogReportingインスタンス メンバーを宣言する場合、なぜ静的クラスとして宣言したのでしょうか。

于 2012-12-06T20:52:02.957 に答える
1

クラスが static としてマークされている場合、そのメンバーはすべて static である必要があります(インスタンスの作成は許可されていません)。msdnで静的クラスの詳細を読むことができます。

したがって、インスタンス (非静的) メソッドが必要な場合は、クラス定義からstaticキーワードを削除します。

public class LogReporting
{
     public void RunTimerJobs()
     {
         //...
     }
}

この場合LogReporting、メソッドを呼び出すインスタンスを作成する必要があります。

LogReporting log = new LogReporting();
log.RunTimerJobs();

あなたのための別のオプション - あなたのメソッドをstaticにする:

public static class LogReporting
{
     public static void RunTimerJobs()
     {
         //...
     }
}

この場合、次のインスタンスは必要ありませんLogReporting:

LogReporting.RunTimerJobs();
于 2012-12-06T20:52:06.887 に答える
0

試しましたか:

public static void RunTimerJobs()

于 2012-12-06T20:52:11.070 に答える
0

静的クラスの場合、メンバーも静的である必要があります。メンバーを静的にできない場合は、クラスも非静的にする必要があります。

可能であれば非静的クラスを使用することをお勧めします。静的クラスは簡単にモックアウトできないため、単体テストが複雑になるためです。もちろん、静的クラスを使用する正当な必要がある場合は、必ずそうしてください。

于 2012-12-06T20:53:02.193 に答える