As little as possible should be static - excepting extension methods, which have to be, and some methods which are "generic" to an application rather than specific to a class.
C# is an OOPs language - and the first "O" is for "Object"! If you make everything static, then you are ignoring what makes the language work in the first place.
It's just a different way of looking at things: instead of the procedure being the important thing as in a "traditional" application, the object becomes capable of dealing with itself, and thus it's a lot easier to handle multiple instances of the same type of object.
Think of a mother with half a dozen children: if she is to get them all to school on time, it all works better if the children know how to dress themselves, so the mother can get on with other things, like sorting out breakfast. So Dress becomes a method of the class Child, and the mother just issues instructions:
mike.Dress();
joe.Dress();
sandra.Dress();
...
Or
foreach (Child child in children)
{
child.Dress();
}
Instead of having to have the mother work out how to do it:
Dress(mike);
Dress(joe);
...
In the OOPs (non-static) version, the child knows how to dress itself (and you can have different methods for BoyChild and GirlChild - both of which are derived from Child - to put a dress on the girls, and trousers on the boys for example).
In the older "traditional" method, the mother knows how to dress a child and has to check in her code what type of child she is dressing to get the right clothes on.
There is a heck of a lot more to it all that this, but that's about it for a small test box! :laugh: