2010-07-30 14 views
7

In C#, è possibile accedere a una variabile di istanza tramite un metodo statico in classi diverse senza utilizzare il parametro passing?È possibile accedere a una variabile di istanza tramite un metodo statico?

Nel nostro progetto, ho una classe Data access layer che ha molti metodi statici. In questi metodi il valore di timeout SqlCommand è stato hardcoded. In un'altra classe (Dac) nel nostro framework ci sono molti metodi di istanza che chiamano questi metodi statici.

Non voglio codificare troppo utilizzando il passaggio dei parametri. Avete qualche altra soluzione che sia più semplice del passaggio dei parametri?

+0

Un metodo statico non è associato a qualsiasi istanza così come si fa ci si aspetta di sapere quale istanza per accedere a un membro di? –

+0

quale istanza? –

risposta

11

Sì, è possibile accedere a una variabile di istanza da un metodo statico senza utilizzare un parametro ma solo se è possibile accedervi tramite qualcosa che è dichiarato statico. Esempio:

public class AnotherClass 
{ 
    public int InstanceVariable = 42; 
} 

public class Program 
{ 
    static AnotherClass x = new AnotherClass(); // This is static. 

    static void Main(string[] args) 
    { 
     Console.WriteLine(x.InstanceVariable); 
    } 
} 
+4

+1, ma oh [l'orrore delle variabili globali] (http://c2.com/cgi/wiki?GlobalVariablesAreBad)! –

+0

sì ... porta alla luce ricordi di incubi d'infanzia! –

5

Certo, è possibile passare un'istanza come parametro al metodo. Mi piace:

public static void DoSomething(Button b) 
{ 
    b.Text = "foo"; 
} 

Ma non sarebbe possibile ottenere in qualsiasi istanza variabili altrimenti.

+0

grazie Jake, ma ho cambiato la domanda. – mkus

6

Un metodo statico non ha istanze con cui lavorare, quindi no. Non è possibile senza il passaggio dei parametri.

Un'altra opzione potrebbe essere l'uso di un'istanza statica della classe (l'esempio di Mark mostra questo metodo al lavoro) sebbene, dal tuo esempio, non sono sicuro che risolverebbe il tuo problema.

Personalmente, penso che il passaggio dei parametri sarà l'opzione migliore. Non sono ancora sicuro del motivo per cui vuoi evitarlo.

+0

justin, ho modificato la mia domanda per il vostro interesse. – mkus

+1

La modifica si riduce a "Non voglio", che non è un buon motivo tecnico. L'alternativa è davvero pessima, se non impossibile. – siride

1

No, non è possibile.

Se si desidera accedere a una variabile di istanza, il metodo per definizione non deve essere statico.

+0

E per accedere alle proprietà di istanza dei singleton? –

+1

@Richard: con un singleton hai un'istanza e in questo caso i metodi non sarebbero statici. Solo il metodo per ottenere l'istanza Singleton è statico. –

2

Sì, è possibile, purché abbia un'istanza di un oggetto in ambito. Singletons per esempio, o gli oggetti creati all'interno del metodo stesso ..

Prendiamo ad esempio uno scenario comune:

public static string UserName 
{ 
    return System.Web.HttpContext.Current.User.Identity.Name; 
} 
Problemi correlati