У меня есть код благородных предшественниковПочему компилятор удалить неиспользуемые структуры, но не классы
static void Main(string[] args)
{
var str = new DummyStruct();
var testClass = new DummyClass();
}
Ни класс или структура имеет любую реализацию. Но когда я смотрю на код после сборки выпуска с использованием ILSpy я
private static void Main(string[] args)
{
new DummyClass();
}
Так что мой вопрос: Почему компилятор игнорирует инстанцирования структуры, но не один из класса?
Компилятор C# довольно консервативен в отношении удаления мертвого кода. Это работа дрожания, он знает намного больше о том, что на самом деле делает код. Но «конструктор по умолчанию» для структуры, как правило, не разрешен ни C#, ни разрешение CLR. Необходимость писать «новое» сама по себе довольно бесполезна, но вдохновлена определенным правилом назначения на C#. Не обязательно в VB.NET или C++/CLI, например. –
@ HansPassant Это очень информативный комментарий. но после небольшого исследования я обнаружил, что это просто C#, который не позволяет создавать a безпараметрического конструктора, он швы полностью согласуется с точкой зрения CLR. У вас есть какие-либо документы, которые показывают обратное? – trebor
Ecma-335 глава II.13.2, логические скобки. –