2010-07-30 11 views
7

En C#, ¿es posible acceder a una variable de instancia mediante un método estático en diferentes clases sin utilizar el paso de parámetros?¿Es posible acceder a una variable de instancia a través de un método estático?

En nuestro proyecto, tengo una clase Data access layer que tiene muchos métodos estáticos. En estos métodos, el valor de tiempo de espera SqlCommand ha sido codificado. En otra clase (Dac) en nuestro marco, hay muchos métodos de instancia que llaman a estos métodos estáticos.

No quiero codificar demasiado usando el paso de parámetros. ¿Tiene alguna otra solución que sea más fácil que pasar los parámetros?

+0

Un método estático no está asociado con ninguna instancia así que ¿cómo se puede esperar para saber qué instancia para acceder a un miembro de? –

+0

¿qué instancia? –

Respuesta

11

Sí, es posible acceder a una variable de instancia desde un método estático sin usar un parámetro, pero solo si se puede acceder a través de algo que está declarado como estático. Ejemplo:

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, pero oh [el horror de las variables globales] (http://c2.com/cgi/wiki?GlobalVariablesAreBad)! –

+0

sí ... ¡trae recuerdos de pesadillas infantiles! –

5

Claro, podría pasar una instancia como parámetro del método. Me gusta:

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

Pero no sería posible obtener en cualquier variable de instancia lo contrario.

+0

gracias Jake, pero cambié la pregunta. – mkus

6

Un método estático no tiene ninguna instancia para trabajar, entonces no. No es posible sin el paso de parámetros.

Otra opción para usted podría ser utilizar una instancia estática de la clase (el ejemplo de Mark muestra este método en funcionamiento) aunque, de su ejemplo, no estoy seguro de que eso resuelva su problema.

Personalmente, creo que la aprobación de parámetros va a ser la mejor opción. Todavía no estoy seguro de por qué quieres evitarlo.

+0

justin, edité mi pregunta para su interés. – mkus

+1

La edición se reduce a "No quiero", lo cual no es una buena razón técnica. La alternativa es realmente muy mala, si no imposible. – siride

1

No, no puedes.

Si desea acceder a una variable de instancia, su método, por definición, no debe ser estático.

+0

¿Qué ocurre al acceder a las propiedades de instancia de los singletons? –

+1

@Richard: con un singleton tienes una instancia, y los métodos no serían estáticos en ese caso. Solo el método para obtener la instancia singleton es estático. –

2

Sí, puede, siempre que tenga una instancia de un objeto en el alcance. Singleton por ejemplo, o los objetos creados en el método en sí ..

Tomemos, por ejemplo, un escenario común:

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