2010-01-12 10 views
6

Mój mózg nie działa dziś rano. Potrzebuję pomocy w uzyskiwaniu dostępu do niektórych członków metodą statyczną. Oto przykładowy kod, jak można zmodyfikować to tak, że TestMethod() ma dostęp do testIntUzyskanie dostępu z metody statycznej

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 
    } 
} 

Odpowiedz

10

testInt jest zadeklarowane jako pole instancji. Niemożliwe jest, aby metoda static uzyskiwała dostęp do pola instancji bez odwoływania się do instancji klasy definiującej. Zatem albo zadeklaruj testInt jako statyczny, albo zmień TestMethod, aby zaakceptować instancję TestPage. Więc

protected static int testInt { get; set; } 

jest w porządku, ponieważ jest

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

Który z nich jest odpowiednia, zależy w dużej mierze od tego, co starasz się modelować. Jeśli testInt reprezentuje stan instancji TestPage, użyj tego ostatniego. Jeśli testInt jest czymś w rodzaju TestPage, użyj tego pierwszego.

4
protected static int testInt { get; set; } 

Ale uważaj z kwestiami gwintów.

+0

Dziękuję, proszę pana. Pracował jak mistrz. –

+0

Po pierwsze, zakładam, że to jest strona internetowa. W takim przypadku takie podejście może powodować problemy. Jeśli użytkownicy mogą ustawić wartość twojego int, być może poprzez dane wejściowe na stronie, będą walczyć o tę samą wartość. , tj. Użytkownik A ustawia wartość na 7. Użytkownik B ustawia wartość na 5. Użytkownik A będzie teraz widzieć wartość jako 5. –

+0

, wtedy pytanie powinno być zadawane konkretnie, jaki jest najlepszy sposób radzenia sobie z tym sytuacji, a nie jak uzyskać dostęp do właściwości statycznej. Pozostałe odpowiedzi udzieliłem jednak Luke'owi i Jasonowi, ponieważ są to również poprawne odpowiedzi. –

6

dwie opcje, w zależności od tego, co dokładnie próbujesz zrobić:

  • Dodać nieruchomość testInt statyczne.
  • Zmiana TestMethod tak, aby wystąpił jako argument w postaci TestPage.
4

Należy pamiętać, że static oznacza, że ​​członek lub metoda należy do klasy, a nie do instancji klasy. Więc jeśli znajdujesz się w statycznej metodzie i chcesz uzyskać dostęp do niestatycznego elementu, musisz mieć instancję klasy, do której chcesz uzyskać dostęp do tych członków (chyba że członkowie nie muszą należeć do żadnej konkretnej instancji klasy, w którym to przypadku możesz po prostu uczynić je statycznymi).

Powiązane problemy