C# Language Static keyword


The static keyword means 2 things:

  1. This value does not change from object to object but rather changes on a class as a whole
  2. Static properties and methods don't require an instance.

public class Foo
    public Foo{

    public static int Counter { get; set; }
    public int NonStaticCounter { get; set; }

public class Program 
    static void Main(string[] args)
        //Create an instance
        var foo1 = new Foo();
        Console.WriteLine(foo1.NonStaticCounter); //this will print "1"

        //Notice this next call doesn't access the instance but calls by the class name.
        Console.WriteLine(Foo.Counter); //this will also print "1"

        //Create a second instance
        var foo2 = new Foo();

        Console.WriteLine(foo2.NonStaticCounter); //this will print "1"

        Console.WriteLine(Foo.Counter); //this will now print "2"
        //The static property incremented on both instances and can persist for the whole class