Чтобы дать кому-нибудь более четкий ответ, без примера подумайте, зачем вам нужен внешний статический конструктор? Статические классы создаются в памяти при выполнении приложения, поэтому они являются статическими. Другими словами, вам НИКОГДА не нужно будет звонить явно, а если вы это сделаете, скажем, через отражение (что я не знаю, позволит ли это вам), то вы делаете что-то не так.
Когда вы создаете новый экземпляр класса, конструктор существует как способ инициализации всех внутренних переменных и выполнения любого вида обработки, необходимой для того, чтобы заставить класс функционировать так, как он предназначен. Обратите внимание: если вы не укажете конструктор, компилятор создаст его для вас. По этой причине вам все еще нужно создать класс с "()", например,
new MyClass();
потому что вы вызываете конструктор по умолчанию (при условии, что вы не определили конструктор без параметров). Другими словами, причина, по которой нестатический конструктор должен быть определен как открытый, заключается в том, что вам нужно вызывать его явно. Если память мне не помешает, C # не скомпилирует код, который пытается вызвать конструктор (через malloc), который не определен как public.
Конструкторы в статическом классе существуют для целей "настройки". Например, у меня может быть статический класс, который должен быть мостом между моим кодом и файлом, из которого я постоянно сохраняю и читаю данные. Я могу определить конструктор, который при создании объекта будет гарантировать, что файл существует, а если не создает файл по умолчанию (очень помогает в веб-системах, перенесенных на другие серверы).