WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте

Анонимный тип (англ. Anonymous types) — одно из нововведений в языках C# 3.0, Visual Basic .NET 9.0 и Oxygene, позволяющее типам данных инкапсулировать набор свойств в едином объекте без необходимости предварительного явного указания типа[1]. Это одна из важнейших особенностей 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, в котором не были предусмотрены анонимные типы. Как следствие, невозможно разрешить конфликт имен при экспорте анонимного типа с совпадающей сигнатурой, и соответственно, анонимный тип нельзя сделать видимым за пределами сборки. Ограничение на методы накладывается потому, что они могут быть экспортированы в другие сборки, что и вызвало бы описанную проблему[2].

См. также

Примечания

  1. Anonymous Types (C# Programming Guide). Microsoft. Проверено 25 ноября 2008. Архивировано 23 июля 2012 года.
  2. C# 3.0 и LINQ. Концепции C# 3.0, позволившие создать LINQ  (рус.)

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии