Wenn Sie einen Referenztyp (zum Beispiel eine Klasse) erstellt haben, können Sie wählen, was sie haben Konstruktoren (für Werttypen ein parameterlosen Konstruktor erforderlich ist, damit Ihre Wahl: Stattdessen können Sie so etwas schreiben ist begrenzt). Wenn Sie keine angeben, wird implizit ein parameterloser Standardkonstruktor für Sie erstellt. Das C# -Designerteam entschied, dass es keinen Wert hat, einen parameterlosen Konstruktor auf dem String
-Typ zu haben. Deshalb können Sie new string()
nicht anrufen. Das ist alles dazu.
Sie können das gleiche mit Ihrer benutzerdefinierten Klasse tun.
public class C
{
public C(int i)
{
}
}
var c = new C(); // invalid
Es gibt mehrere String-Konstrukteure sind, finden Sie https://msdn.microsoft.com/en-us/library/system.string.string(v=vs .110) .aspx. Es gibt einfach keinen Konstruktor ohne Argumente, weil Sie sowieso string.Empty verwenden können. Das ist nicht ungewöhnlich und im Framework und anderswo finden Sie oft Klassen, die nur Konstruktoren mit Argumenten haben. – ckuri