2010-01-12 15 views
6

Mi cerebro no funciona esta mañana. Necesito ayuda para acceder a algunos miembros desde un método estático. Aquí es un código de ejemplo, cómo puedo modificar esto para que TestMethod() tiene acceso a testIntObtener acceso desde un método estático

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

Respuesta

10

testInt se declara como un campo de instancia. Es imposible que un método static acceda a un campo de instancia sin tener una referencia a una instancia de la clase de definición. Por lo tanto, declare testInt como estático, o cambie TestMethod para aceptar una instancia de TestPage. Así

protected static int testInt { get; set; } 

está bien como es

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

Cuál de estos es correcta depende en gran medida de lo que estás tratando de modelar. Si testInt representa el estado de una instancia de TestPage, utilice este último. Si testInt es algo sobre el tipo TestPage, entonces use el primero.

4
protected static int testInt { get; set; } 

pero tenga cuidado con los problemas de threads.

+0

Gracias señor. Trabajó como un campeón. –

+0

En primer lugar, supongo que este es un sitio web. Si ese es el caso, este enfoque podría causar problemas. SI los usuarios pueden establecer el valor de su int, tal vez a través de una entrada en la página, entonces pelearán por el mismo valor. es decir, el usuario A establece el valor a 7. usuario B establece el valor a 5. Un usuario podría ver ahora el valor 5. –

+0

entonces la pregunta debería haber pedido específicamente cuál es la mejor manera de hacer frente a este situación, no cómo acceder a una propiedad estática. Sin embargo, devolví las otras respuestas de Luke y Jason, porque también son las respuestas correctas. –

6

dos opciones, dependiendo de qué es exactamente lo que estamos tratando de hacer:

  • Haga su propiedad testInt estática.
  • Altere TestMethod para que tome una instancia de TestPage como argumento.
4

Recuerde que static significa que un miembro o método pertenece a la clase, en lugar de una instancia de la clase. Entonces, si está dentro de un método estático y quiere acceder a un miembro no estático, entonces debe tener una instancia de la clase para acceder a esos miembros (a menos que los miembros no necesiten pertenecer a ninguna instancia en particular). de la clase, en cuyo caso puedes hacer que sean estáticos).

Cuestiones relacionadas