What are the ways to declare a class that cannot be instantiated?

Marking a class as abstract or static (they are mutually exclusive) are the only two ways. Marking all constructors as private does not make the class uninstantiateable since the class can still construct itself, and others might be able to do it via reflection.


Only static looks like complete solution here because abstract class still can be instantiated when class instance that inherits from it is instantiated. Consider the scenario :

abstract class A {  }

class B : A {  } 

somewhere in code :

B instance = new B();  // this creates instance of class A as well

P.S. At first i though that abstract sealed might be solution for this problem as well but it doesn't make much sense to use such a construction so it doesn't even compile :

Error   1   'A': an abstract class cannot be sealed or static   D:\Projects\TEST\Testapp\Program.cs 15  27  ITT.Domain