Получение доступа от статического метода - PullRequest
6 голосов
/ 12 января 2010

Мой мозг не работает сегодня утром. Мне нужна помощь в доступе к некоторым членам из статического метода. Вот пример кода, как я могу изменить это так, чтобы 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 ]

10 голосов
/ 12 января 2010

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, используйте первое.

6 голосов
/ 12 января 2010

Два варианта, в зависимости от того, что именно вы пытаетесь сделать:

  • Сделайте ваше свойство testInt статическим.
  • Измените TestMethod, чтобы он принял экземпляр TestPage в качестве аргумента.
4 голосов
/ 12 января 2010

Помните, что static означает, что член или метод принадлежит классу, а не экземпляру класса. Поэтому, если вы находитесь внутри статического метода и хотите получить доступ к нестатическому члену, то у вас должен быть экземпляр класса, к которому можно получить доступ к этим членам (если только члены не должны принадлежать какому-либо конкретному экземпляру). класса, в этом случае вы можете просто сделать их статическими). ​​

4 голосов
/ 12 января 2010
protected static int testInt { get; set; }

Но будьте осторожны с проблемами потоков.

...