What is the difference between a static class and a namespace? (in C#)

c#

Solution

Yes, a `static` class is technically a type. It can have members (fields, methods, events). A namespace can only hold types (and it's not considered a "type" by itself; `typeof(System)` is a compile-time error).

There's no direct equivalent to adding a `using` directive for a namespace for a static class. You can, however, declare aliases:

using ShortName = ReallyReallyLongStaticClassName;

and use

ShortName.Member

when referring its members.

Additionally, you can use static classes to declare extension methods on other types and use them directly without referring to the class name explicitly:

public static class IntExtensions {
   public static int Square(this int i) { return i * i; }
}

and use it like:

int i = 2;
int iSquared = i.Square(); // note that the class name is not mentioned here.

Of course, you'll have to add a `using` directive for the namespace containing the class to use the extension method if the class is not declared in the root or current namespace.

Problem

The only difference I see is the fact that you can't use the "using staticClass" declaration. Therefore, I'm wondering: - Is there a real difference between a static class and a namespace? - Is there a possibility to avoid having to rewrite the class name every time a member function is called? I'm thinking about something analogous to "using staticClass".

Original source