28 May 2013

Question on static class

How can you make a class which cannot be inherited and instantiated?

If you don't know the answer for this question upfront, you might come up with 3 guess below:

  1. Creating an abstract class:

    Abstract classes cannot be instantiated. It met the first requirement of the question.

  2. Creating a sealed class:

    Sealed classes cannot be inherited. It met the second requirement of the question.

  3. Making the class both abstract and sealed:
       namespace WhenToUseStaticClass
      {
       public abstract static class FormatHelper { }
      }
    
    When a class marked as abstract and sealed, you will get the below compile time error:

    "an abstract class cannot be sealed or static"

    The above error make sense.
    1. Why an abstract class cannot be sealed class?

      The reason behind creating abstract class is that to derive class from it. But sealed class means, it cannot be inherited. Abstract and sealed are contradictory and hence an abstract class cannot be sealed class.

    2. Why an abstract cannot be static class?

      Static class members can be used only with class name where as abstract class members cannot accessed outside without a derived class instance. In some way an abstract class and static class are contradictory and hence a class cannot be abstract and static.

As you read, answer 1 & 2 doesn't met the requirement fully and answer 3 is not possible. Then what is the correct answer for the question?

Make the class as static. Static class cannot be inherited and instantiated