2010-02-17 16 views
6

Esto parece básico pero estoy encontrando esto bastante trivial. Simplemente, ¿cómo recomendaría establecer una variable global con una clase estática (es decir, aplicación de consola)?Variable global en un método estático

Para darle un poco más de fondo, el método principal es llamar a algunos eventhandlers personalizados que espero obtener/establecer las variables.

Se agradecen todas las ideas o sugerencias que tenga.

manera
+9

Yo personalmente recomendaría borrar la frase "variable global" de su vocabulario. – Aaronaught

+6

para referencia futura, algo que es trivial, es algo que parece ser simple. – NerdFury

Respuesta

9

más simple es

public static Object MyGlobalVariable; 

que crea un campo estático público. Un poco mejor es:

public static Object MyGlobalVariable { get; set; } 

Que crea una propiedad pública estática.

+1

¿Por qué la propiedad es un poco mejor? – IllidanS4

+0

@ IllidanS4, stackoverflow.com/questions/653536/difference-between-property-and-field-in-c-sharp-3-0/653799 –

+0

Conozco la diferencia, pero ¿las propiedades estáticas son objetivamente mejores que las de los campos estáticos? – IllidanS4

13

No hay variables globales en C#. Una variable siempre tiene un alcance local. La unidad fundamental de código es la clase, y dentro de una clase tiene campos, métodos y propiedades.

Usted puede imitar una "variable global" al hacer un campo estático propiedad pública o de alguna clase, pero no debe . C# lo hace difícil por una muy buena razón; las variables globales son pura maldad. Violan varios buenos principios del diseño OO: encapsulación, acoplamiento flexible y alta cohesión, por nombrar solo algunos.

Me doy cuenta de que esta es una pregunta para principiantes, pero creo que es porque esta es una pregunta para principiantes que es tan importante decir esto. Ahora es el mejor momento para comenzar a aprender qué tácticas se desaconsejan activamente o incluso son peligrosas en C#, y usar un campo/propiedad estático como variable global es aproximadamente seis de ellas. Existen usos legítimos para estos constructos, pero pasar datos de un lugar a otro no es uno de ellos.

Si dos clases diferentes dependen de la misma información, entonces pasa la información de la fuente al destino. Esto se hace generalmente a través del constructor o como un argumento para el método que se llama. Siempre debe tener una y solo una instancia que verdaderamente "posee" esta información; Hacer que la información sea "global" significa que no se puede razonar sobre quién o qué podría depender de ella en un momento dado.

Considere esto y trate de pensar en otras formas en las que podría compartir la información que desea almacenar en una variable global (es decir, proporcionándola como argumento para un constructor o método). Si no está seguro, publique un ejemplo de lo que intenta hacer y le ayudaremos.

+0

Gracias por elaborar ... eso fue muy útil. –

+0

Supongamos que tengo un par de subprocesos ejecutándose simultáneamente y lejos del subproceso principal y ahora cuando hay una falla en cualquiera de esos subprocesos, deseo aumentar el recuento de fallas. ¿Cómo se haría esto entonces? – user20358

+0

@ user20358: Esa no es información suficiente para recomendar una solución. ¿Qué están haciendo los hilos? ¿Por qué iban a fallar? ¿Cuáles son las consecuencias del fracaso? ¿Cuál es precisamente el punto de * contar * ellos, en lugar de registrarlos o tomar alguna medida de seguimiento? Debe aclarar su problema y hacer una nueva pregunta. – Aaronaught