Skip to main content

How to Resolve Error "CS0710: Static classes cannot have instance constructors" in C#

The Compiler Error CS0710 is a logical structure error. The message reads: "Static classes cannot have instance constructors".

In C#, a static class is designed to be a container for global data and methods. By definition, a static class cannot be instantiated (you cannot use new MyStaticClass()). Because instances of the class can never exist, an instance constructor (which runs only when an object is created) would be unreachable code. Therefore, the compiler forbids declaring one.

This guide explains how to initialize static classes correctly using static constructors.

Understanding the Conflict

  • Instance Constructor: public MyClass() { ... }
    • Called every time you write new MyClass().
    • Initializes data specific to that object.
  • Static Class: static class MyClass
    • Cannot be instantiated via new.
    • Has no "this" pointer and no specific objects.

Since you cannot create an instance, an instance constructor serves no purpose. If you need to run initialization code for your static members, you must use a Static Constructor instead.

Scenario: The Invalid Constructor

This error typically happens when a developer converts a standard class to a static class (e.g., a Helper class) but forgets to update or remove the existing constructor.

Example of error:

public static class AppSettings
{
public static string ConnectionString;

// ⛔️ Error CS0710: Static classes cannot have instance constructors
// The 'public' modifier implies an instance constructor intended for external calling.
// Since 'AppSettings' is static, no one can call 'new AppSettings()'.
public AppSettings()
{
ConnectionString = "DefaultConnection";
}
}

Solution 1: Use a Static Constructor

If you need to initialize static fields (like reading config files or setting default values), change the constructor to be static.

Rules for Static Constructors:

  1. Must use the static keyword.
  2. Cannot have access modifiers (no public or private).
  3. Cannot have parameters.

Solution:

public static class AppSettings
{
public static string ConnectionString;

// ✅ Correct: Static constructor
// This runs automatically once, before the class is first used.
static AppSettings()
{
ConnectionString = "DefaultConnection";
System.Console.WriteLine("Settings Initialized");
}
}

public class Program
{
static void Main()
{
// Accessing a member triggers the static constructor automatically
System.Console.WriteLine(AppSettings.ConnectionString);
}
}

Output:

Settings Initialized
DefaultConnection
note

You do not call a static constructor manually. The Common Language Runtime (CLR) guarantees it runs before any member of the class is referenced.

Solution 2: Make the Class Non-Static

If your intention was indeed to create objects of this class (e.g., var settings = new AppSettings()), then the class should not be marked static.

Solution: remove the static keyword from the class declaration.

// ✅ Correct: Now a standard class
public class AppSettings
{
public string ConnectionString;

// Valid instance constructor
public AppSettings()
{
ConnectionString = "DefaultConnection";
}
}

class Program
{
static void Main()
{
// Now valid to use 'new'
var mySettings = new AppSettings();
}
}

Conclusion

CS0710 ensures your constructors match your class design.

  1. Check the Class: Is it public static class?
  2. Check the Intent:
    • Global Utility: Keep the class static. Change the constructor to static ClassName() (remove public).
    • Object Blueprint: Remove static from the class definition so you can use new.