Static Classes, Methods and Variables

Today someone  asked me what the difference between a class and a static class was. Of course my mind went blank and I got to squirm for a bit. I think it’s basic software engineering that any developer should know and it was a bit embarrassing. So as soon as I got home I did some Googling, watched some videos. It’s nice being single and having time to do that kind of stuff. Here’s what I’ve come up with:

A static class is one which you don’t need to make an instance of but can contain a collection of useful functions.

For example x = Math.Sqrt(144): uses the Math class but of course you don’t need to create an instance of the Math class to do that. If you try to create an instance of the Math class you will get an error message… Because it’s static 😉

A method that belongs to a static class is therefore automatically a static method.

You identify  both by using the keyword ‘static’ to make it easier for other developers and the compiler to know what’s going on.

Eg: static class UsefulTool

public static void HelloWorld

This is useful for tools/methods that you may want to re-use in your projects. I’ve actually been using these sort of collections of functions for years, as would most developers who don’t like repeating code necessarily.

A static variable is one which is about the class, not the instance of the object. So, for example you could have a counter within your class that is incremented each time a new instance of the class is created. At any point you can get the value of the static variable without refering to the instance of the object:

x= Car.count;

The code above would display the number of instances of the Car object that we’ve created (If the static int count gets incremented each time the constructor is loaded. Ie every time there is a new instantiation of an object )

A non static class that can instantiated as an object can also have static methods. For example the Car class could have a static method called GetCount(); which returns the value of static int count.