Анонимный интернационал
- 1 year ago
- 0
- 0
Анонимный тип
(
англ.
Anonymous types
) — одно из нововведений в языках
C#
3.0,
Visual Basic .NET 9.0
и
Oxygene
, позволяющее
типам данных
инкапсулировать набор свойств в едином объекте без необходимости предварительного явного указания типа
. Это одна из важнейших особенностей
SQL
-подобного языка
LINQ
, интегрированного в языки C# и VB.net. Поскольку анонимные типы не поддерживают типизацию имён, то они должны храниться в
переменных
, объявленных при помощи ключевого слова
var
, сообщающего компилятору языка C# использовать
вывод типов
для данной переменной. Такие свойства в языке C# доступны только для чтения, однако в языке VB.net они доступны и для изменения (чтение-запись).
Данную возможность не следует путать с динамической типизацией . Несмотря на то, что анонимные типы позволяют программисту определять поля «на лету», они все равно остаются статическими сущностями. Проверка типа выполняется во время компиляции, и попытка получить доступ к несуществующему полю вызовет ошибку компиляции. Это позволяет программисту воспользоваться удобством динамического языка наряду с безопасностью типов языка со статической типизацией .
var person = new {FirstName = "Иван", LastName = "Иванов"}
var size = new {Heigth = 7, Weigth = 5, Depth = 5}
Dim person = New With {.FirstName = "Иван", .LastName = "Иванов"}
var person := new class(FirstName := 'Пётр', LastName := 'Петров');
let person = object val firstName = "Пётр" val lastName = "Петров" end;;
Одним из главных недостатков анонимного типа в C# 3.0 является невозможность экспортировать его за пределы метода, в котором его создали. Данное ограничение связано с унаследованными ограничениями CLR .NET Framework 2.0, в котором не были предусмотрены анонимные типы. Как следствие, невозможно разрешить конфликт имен при экспорте анонимного типа с совпадающей сигнатурой, и соответственно, анонимный тип нельзя сделать видимым за пределами сборки. Ограничение на методы накладывается потому, что они могут быть экспортированы в другие сборки, что и вызвало бы описанную проблему .