Is there really any good situation where it would be nice to have all objects of a class share a variable? Besides constants, of course.
3 Answers
there is no one answer for that. there is all sort of reasons to use and not to use. for example, a class counter the checks how many instances from this class created could be a static variable in a class. that really depends on what you are programing and why.
if you'll look here on the first answer there is also some answer for you

- 1
- 1

- 11,411
- 10
- 42
- 70
Static variables can be used to share a variable across all instances of a class, like in this example:
class Program
{
static void Main(string[] args)
{
//Create new instances of the Employee class
Employee joe = new Employee("joe", 1);
Employee billy = new Employee("billy", 2);
Console.WriteLine(Employee.EmployeeCount);
Console.ReadKey();
}
}
class Employee
{
public string Name { get; set; }
public int ID { get; set; }
public static int EmployeeCount { get; set; }
public Employee(string n, int id)
{
this.ID = id;
this.Name = n;
EmployeeCount++;
}
}
As opposed to static variables, instance variables allow each Employee
class to have their own Name
and ID
variables.

- 2,362
- 2
- 19
- 33
The answer is Yes, there are situations you would like to use a static variable and have all instances of a class share this variable.
Example
Lets say you have a book collection. You can keep track of number of books by adding a static field of bookCount and increasing it's value when a book is created.
You can take a look at @pcnThird answer for a code example.
My favorite usage for static variables
I find static fields most effective when I want to use a field that should behave as a constant field, but I can not know it's value at compile time.
for example lets say you have a log class. you may create many instances of this log class and every instance will log to a different location on your file system.
If you want all of your logs files to have the same prefix including the date, it can not be a constant as the date has an annoying habit of changing...
The solution could be a static
field (I usually prefer a static readonly
which acts as a constants after the constructor has completed it's job).
Public class Log
{
public static readonly string LogFilenamePrefix;
Public Static Log()
{
Log.LogFilenamePrefix = DateTime.Today.ToString()+"_MyLogFile";
}
}
In this example you can also see that the DateTime class uses as Static Today
variable, which brings me to the next example:
The obvious example
There is of course the situation of static classes where you don't have a choice but using static variables...
P.S. Some consider static variables to be evil. Take a look at this SO post.

- 1
- 1

- 10,234
- 7
- 48
- 75