Interested Article - Анонимный тип

Анонимный тип ( англ. Anonymous types ) — одно из нововведений в языках C# 3.0, Visual Basic .NET 9.0 и Oxygene , позволяющее типам данных инкапсулировать набор свойств в едином объекте без необходимости предварительного явного указания типа . Это одна из важнейших особенностей SQL -подобного языка LINQ , интегрированного в языки C# и VB.net. Поскольку анонимные типы не поддерживают типизацию имён, то они должны храниться в переменных , объявленных при помощи ключевого слова var , сообщающего компилятору языка C# использовать вывод типов для данной переменной. Такие свойства в языке C# доступны только для чтения, однако в языке VB.net они доступны и для изменения (чтение-запись).

Сравнение с динамической типизацией

Данную возможность не следует путать с динамической типизацией . Несмотря на то, что анонимные типы позволяют программисту определять поля «на лету», они все равно остаются статическими сущностями. Проверка типа выполняется во время компиляции, и попытка получить доступ к несуществующему полю вызовет ошибку компиляции. Это позволяет программисту воспользоваться удобством динамического языка наряду с безопасностью типов языка со статической типизацией .

Примеры

На языке C#

var person = new {FirstName = "Иван", LastName = "Иванов"}
var size = new {Heigth = 7, Weigth = 5, Depth = 5}

На языке Visual Basic .NET

Dim person = New With {.FirstName = "Иван", .LastName = "Иванов"}

На языке Oxygene

var person := new class(FirstName := 'Пётр', LastName := 'Петров');

На языке OCaml

let person = object val firstName = "Пётр" val lastName = "Петров" end;;

Критика

Одним из главных недостатков анонимного типа в C# 3.0 является невозможность экспортировать его за пределы метода, в котором его создали. Данное ограничение связано с унаследованными ограничениями CLR .NET Framework 2.0, в котором не были предусмотрены анонимные типы. Как следствие, невозможно разрешить конфликт имен при экспорте анонимного типа с совпадающей сигнатурой, и соответственно, анонимный тип нельзя сделать видимым за пределами сборки. Ограничение на методы накладывается потому, что они могут быть экспортированы в другие сборки, что и вызвало бы описанную проблему .

См. также

Примечания

  1. . Microsoft. Дата обращения: 25 ноября 2008. 23 июля 2012 года.
  2. от 3 июня 2011 на Wayback Machine (рус.)

Ссылки

  • (англ.)
  • (англ.)
Источник —

Same as Анонимный тип