6

今朝は頭が働きません。静的メソッドからいくつかのメンバーにアクセスするための助けが必要です。これがサンプルコードです。TestMethod ()testIntにアクセスできるようにこれを変更するにはどうすればよいですか?

public class TestPage
{ 
    protected int testInt { get; set; }

    protected void BuildSomething
    {
      // Can access here
    }

    [ScriptMethod, WebMethod]
    public static void TestMethod()
    {
       // I am accessing this method from a PageMethod call on the clientside
       // No access here
    }  
}
4

4 に答える 4

10

testIntインスタンスフィールドとして宣言されています。static定義クラスのインスタンスへの参照がなければ、メソッドがインスタンス フィールドにアクセスすることはできません。testIntしたがって、静的として宣言するかTestMethod、 のインスタンスを受け入れるように変更しますTestPage。そう

protected static int testInt { get; set; }

そのままで大丈夫です

public static void TestMethod(TestPage testPage) {
    Console.WriteLine(testPage.testInt);
}

これらのどれが正しいかは、モデル化しようとしているものに大きく依存します。testIntのインスタンスの状態を表す場合TestPageは、後者を使用します。testIntタイプに関するものである場合はTestPage、前者を使用してください。

于 2010-01-12T15:10:02.017 に答える
6

正確に何をしようとしているのかに応じて、2 つのオプションがあります。

  • プロパティtestIntを静的にします。
  • TestMethodのインスタンスをTestPage引数として取るように変更します。
于 2010-01-12T15:08:41.223 に答える
4
protected static int testInt { get; set; }

ただし、スレッドの問題には注意してください。

于 2010-01-12T15:07:41.973 に答える
4

staticこれは、クラスのインスタンスではなく、メンバーまたはメソッドがクラスに属することを意味することに注意してください。したがって、静的メソッド内にいて、非静的メンバーにアクセスする場合は、それらのメンバーにアクセスするためのクラスのインスタンスが必要です (メンバーが特定のインスタンスに属する必要がない場合を除く)。その場合、それらを静的にすることができます)。

于 2010-01-12T15:09:58.030 に答える