Thursday, April 28, 2011

Global variables in Visual C#

How do I declare global variables in Visual C#?

From stackoverflow
  • How about this

    public static class Globals {
        pulic static int GlobalInt { get; set; }

    Just be aware this isn't thread safe. Access like Globals.GlobalInt

    This is probably another discussion, but in general globals aren't really needed in traditional OO development. I would take a step back and look at why you think you need a global variable. There might be a better design.

    Pavel Minaev : In what sense is it not thread safe? And how is that any different from a non-static property?
    0A0D : -1 for not explaining why it isn't thread safe... needs more explanation
    Bob : This isn't a question about thread safety. If you are interested in thread safety then ask in another question or update this question to explicitly include a thread safe solution. Also see this question for what thread safety is if you never heard the term
    Russell : +1 for "I would take a step back and look at why you think you need a global variable. There might be a better design." I found in large projects, it is a lot more difficult to track the use of global variables opposed to instance variables. This helps, especially during maintenance.
  • Use the const keyword:

    public const int MAXIMUM_CACHE_SIZE = 100;

    Put it in a static class eg

    public class Globals
        public const int MAXIMUM_CACHE_SIZE = 100;

    And you have a global variable class :)

    Phenom : Doesn't the const keyword make it constant? Can it be changed?
    mykhaylo : "The const keyword is used to modify a declaration of a field or local variable. It specifies that the value of the field or the local variable cannot be modified." -
    JohannesH : A const field isn't varable. ;)
    Russell : lol yeah - i read the question too quickly, I usually only provide contants when exposing values globally. Everything else are in instance variables. :)
  • You can'nt declare global variables - use static class or Singleton pattern

  • The nearest you can do this in C# is to declare a public variable in a public static class. But even then, you have to ensure the namespace is imported, and you specify the class name when using it.

  • A public static field is probably the closest you will get to a global variable

    public static class Globals
      public static int MyGlobalVar = 42;

    However, you should try to avoid using global variables as much as possible as it will complicate your program and make things like automated testing harder to achieve.


Post a Comment