Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 340 341 342 343 344 345 346 347 348 ... 642

static void ExportToExcel(List<Car> carsInStock)

{

<b>  // Загрузить Excel и затем создать новую пустую рабочую книгу.</b>

  Excel.Application excelApp = new Excel.Application();

<b>  // Сделать пользовательский интерфейс Excel видимым на рабочем столе.</b>

  excelApp.Visible = true;

...

}

После создания пустого рабочего листа добавляются три столбца, именованные в соответствии со свойствами класса Car. Затем ячейки наполняются данными List&lt;Car&gt;, и файл сохраняется с жестко закодированным именем Inventory.xlsx.

Если вы запустите приложение, то сможете затем открыть файл Inventory.xlsx, который будет сохранен в подкаталоге binDebugnet5.0 вашего проекта.

Хотя не похоже, что в предыдущем коде использовались какие-либо динамические данные, имейте в виду, что среда DLR оказала значительную помощь. Без среды DLR код пришлось записывать примерно так:

static void ExportToExcelManual(List&lt;Car&gt; carsInStock)

{

  Excel.Application excelApp = new Excel.Application();

  // Потребуется пометить пропущенные параметры!

  excelApp.Workbooks.Add(Type.Missing);

  // Потребуется привести объект Object к _Worksheet!

  Excel._Worksheet workSheet =

    (Excel._Worksheet)excelApp.ActiveSheet;

  // Потребуется привести каждый объект Object к Range

  // и затем обратиться к низкоуровневому свойству Value2!

  ((Excel.Range)excelApp.Cells[1, &quot;A&quot;]).Value2 = &quot;Make&quot;;

  ((Excel.Range)excelApp.Cells[1, &quot;B&quot;]).Value2 = &quot;Color&quot;;

  ((Excel.Range)excelApp.Cells[1, &quot;C&quot;]).Value2 = &quot;Pet Name&quot;;

  int row = 1;

  foreach (Car c in carsInStock)

  {

    row++;

    // Потребуется привести каждый объект Object к Range

    // и затем обратиться к низкоуровневому свойству Value2!

    ((Excel.Range)workSheet.Cells[row, &quot;A&quot;]).Value2 = c.Make;

    ((Excel.Range)workSheet.Cells[row, &quot;B&quot;]).Value2 = c.Color;

    ((Excel.Range)workSheet.Cells[row, &quot;C&quot;]).Value2 = c.PetName;

  }

  // Потребуется вызвать метод get _ Range()

  // с указанием всех пропущенных аргументов!

  excelApp.get_Range(&quot;A1&quot;, Type.Missing).AutoFormat(

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

    Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2,

    Type.Missing, Type.Missing, Type.Missing,

  Type.Missing, Type.Missing, Type.Missing);

  // Потребуется указать все пропущенные необязательные аргументы!

  workSheet.SaveAs(

    $@&quot;{Environment.CurrentDirectory}InventoryManual.xlsx&quot;,

    Type.Missing, Type.Missing, Type.Missing,

    Type.Missing, Type.Missing, Type.Missing,

    Type.Missing, Type.Missing, Type.Missing);

  excelApp.Quit();

  Console.WriteLine(&quot;The InventoryManual.xslx file has been saved to your app folder&quot;);

                  // Файл Inventory.xslx сохранен в папке приложения.

}

На этом рассмотрение ключевого слова dynamic языка C# и среды DLR завершено. Вы увидели, насколько данные средства способны упростить сложные задачи программирования, и (что возможно даже важнее) уяснили сопутствующие компромиссы. Делая выбор в пользу динамических данных, вы теряете изрядную часть безопасности типов, и ваша кодовая база предрасположена к намного большему числу ошибок времени выполнения.

В то время как о среде DLR можно еще рассказать многое, основное внимание в главе было сосредоточено на темах, практичных и полезных при повседневном программировании. Если вы хотите изучить расширенные средства DLR, такие как интеграция с языками написания сценариев, тогда обратитесь в документацию по .NET Core (начните с поиска темы "Dynamic Language Runtime Overview" ("Обзор исполняющей среды динамического языка")).

Резюме

Ключевое слово dynamic позволяет определять данные, идентичность которых не известна вплоть до времени выполнения. При обработке исполняющей средой динамического языка (DLR) автоматически создаваемое "дерево выражения" передается подходящему связывателю динамического языка, а полезная нагрузка будет распакована и отправлена правильному члену объекта.

С применением динамических данных и среды DLR сложные задачи программирования на C# могут быть радикально упрощены, особенно действие по включению библиотек СОМ в состав приложений .NET Core. Было показано, что это предлагает несколько дальнейших упрощений взаимодействия с СОМ (которые не имеют отношения к динамическим данным), в том числе встраивание данных взаимодействия СОМ в разрабатываемые приложения, необязательные и именованные аргументы.

Хотя все рассмотренные средства определенно могут упростить код, всегда помните о том, что динамические данные существенно снижают безопасность к типам в коде C# и открывают возможности для возникновения ошибок времени выполнения. Тщательно взвешивайте все "за" и "против" использования динамических данных в своих проектах C# и надлежащим образом тестируйте их!

Глава 19

Язык CIL и роль динамических сборок

При построении полномасштабного приложения .NET Core вы почти наверняка будете использовать C# (или другой управляемый язык, такой как Visual Basic) из-за присущей ему продуктивности и простоты применения. Однако в начале книги было показано, что роль управляемого компилятора заключается в трансляции файлов кода *.cs в код CIL, метаданные типов и манифест сборки. Как выяснилось, CIL представляет собой полноценный язык программирования .NET Core, который имеет собственный синтаксис, семантику и компилятор (ilasm.ехе).

1 ... 340 341 342 343 344 345 346 347 348 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий