Ich habe die Brache CodeWarum der Compiler nicht verwendete structs entfernen, aber keine Klassen
static void Main(string[] args)
{
var str = new DummyStruct();
var testClass = new DummyClass();
}
Weder die Klasse oder die Struktur jede Implementierung haben. Aber wenn ich den Code nach einem Release-Build aussehen ILSpy mit erhalte ich
private static void Main(string[] args)
{
new DummyClass();
}
Also meine Frage ist: Warum hat der Compiler die Instanziierung einer Struktur ignorieren, aber nicht derjenige einer Klasse?
Der C# -Compiler ist ziemlich konservativ über das Entfernen von toten Code. Es ist die Aufgabe des Jitters, es weiß viel mehr darüber, was Code eigentlich macht. Aber es ist einfach für den "Standard-Konstruktor" einer Struktur, weder C# noch die CLR erlauben es, einen zu definieren. Das Schreiben von "neu" ist an sich ziemlich nutzlos, aber inspiriert von der definitiven Zuordnungsregel in C#. Nicht notwendig in VB.NET oder C++/CLI zum Beispiel. –
@HansPassant Das ist ein sehr informativer Kommentar. aber nach ein wenig Forschung habe ich entdeckt, dass es nur C# ist, das die Erstellung eines parameterlosen Konstruktors nicht erlaubt, es scheint aus der Sicht der CLR völlig in Ordnung zu sein. Haben Sie zufällig eine Dokumentation, die das Gegenteil zeigt? – trebor
Ecma-335 Kapitel II.13.2, rationale Klammern. –