2010-01-12 17 views
6

Il mio cervello non funziona stamattina. Ho bisogno di aiuto per accedere ad alcuni membri da un metodo statico. Ecco un codice di esempio, come posso modificare questo in modo che TestMethod() ha accesso a testIntAccesso da un metodo statico

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

risposta

10

testInt è dichiarato come campo di istanza. È impossibile per un metodo static accedere a un campo di istanza senza avere un riferimento a un'istanza della classe di definizione. Pertanto, dichiarare testInt come statico o modificare TestMethod per accettare un'istanza di TestPage. Così

protected static int testInt { get; set; } 

va bene come è

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

Quale di questi è giusto dipende molto da quello che si sta cercando di modellare. Se testInt rappresenta lo stato di un'istanza di TestPage, utilizzare quest'ultimo. Se testInt è qualcosa del tipo TestPage, quindi utilizzare il precedente.

4
protected static int testInt { get; set; } 

Ma attenzione con problemi di threading.

+0

Grazie signore. Ha funzionato come un campione. –

+0

In primo luogo, presumo che si tratti di un sito web. Se questo è il caso, questo approccio potrebbe causare problemi. Se gli utenti possono impostare il valore del tuo int, magari attraverso un input sulla pagina, allora litigheranno sullo stesso valore. L'utente A imposta il valore su 7. L'utente B imposta il valore su 5. L'utente A ora vedrebbe il valore come 5. –

+0

quindi la domanda dovrebbe aver chiesto specificamente qual è il modo migliore per gestire questo situazione, non come accedere a una proprietà statica. Ho comunque votato le altre risposte di Luke e Jason, perché sono anche le risposte corrette. –

6

due opzioni, a seconda di cosa esattamente si sta cercando di fare:

  • Fai vostra proprietà testInt statica.
  • Alter TestMethod in modo che sia necessario un istanza di TestPage come argomento.
4

Ricordare che static significa che un membro o un metodo appartiene alla classe, anziché un'istanza della classe. Quindi, se ci si trova all'interno di un metodo statico e si desidera accedere a un membro non statico, è necessario disporre di un'istanza della classe su cui accedere a tali membri (a meno che i membri non debbano appartenere a una particolare istanza) della classe, nel qual caso puoi semplicemente renderli statici).

Problemi correlati