views:

339

answers:

6

I have doubts on static class and static methods. From MSDN I understood that "Static classes and class members are used to create data and functions that can be accessed without creating an instance of the class."

So if we don't want to associate a class over an instance , we will make it as static. Is that the only advantage? Can anyone guide me in which real time scenario we go for static class.

Some time in classes(not static) I am finding static methods. What advantage/perfomance advantage do static methods give over instance methods in practical.

A: 

i use static methods mainly: reusage of methods, used by several classes with (no) base-implementation (which means basically utils, or global methods).

eg. global equality-comparer:
should every class implement it's own equality-comparer if it could be a generic-static class which does basic check on id?

other examples:

  • System.Configuration.ConfigurationManager
  • System.Threading.Thread.CurrentThread
  • System.Threading.Monitor (as used for locking)
  • System.Web.HttpContext
  • ...

imagine all those static classes/properties without being static ...

Andreas Niedermair
"reusage of methods, used by several classes with no base-implementation ..."... Not Clear what you have said
nehakapoor2010
enhanced my answer ...
Andreas Niedermair
+16  A: 

For utility classes they are great. As you mentioned, they are similiar to global state. So for classes which have no state, for performance benefits the class should be static.

On the other hand, static classes are hard to test (if they contain state). Polymorphism and other OO concepts are also lost.

Use wisely.

Finglas
You should note, the performance gain I mentioned is trivial.
Finglas
+ for loss of inheritance!
Andreas Niedermair
C# has method hiding via the new keyword, which while it's not the same I have found one use for it in my C# work. Even still, it's dirty and being a TDDer, statics are something I avoid unless it falls into the utility class segment.
Finglas
"Utility classes" shouldn't be static. FileInfo is very much a utility class, it isn't static. Maybe utility methods.
Hans Passant
+4  A: 

Applying the static keyword to a class is a C# language convention, it doesn't mean anything special to the CLR. It merely makes sure that all members are static as well and that you can't accidentally create an instance of the class with the new keyword.

The merits of static methods are discussed in this thread.

Hans Passant
+1  A: 

IMO static classes are procedural programming in disguise. Not necessarily a bad thing, but it's not very OOPly. Watch out for the functional decomposition antipattern.

ammoQ
A: 

Static classes are great for defining static methods. This is classic 'utility class' approach. However, be extremely careful with storing state (i.e. defining fields) in a static class. In our multi-threaded world this can lead to unpredictable program behavior unless you synchronize access to static fields.

Kerido
A: 

Static properties mainly used to introduce Context of running code. And you can find confirmation for that in every piece of .NET stack.
ASP.NET - HttpContext.Current
Threading - Thread.CurrentThread
WinForms - WindowsFormsSynchronizationContext.Current
WPF - Dispatcher
etc
static class for me is just container for utility methods.

Sergey Mirvoda