Рейтинг@Mail.ru

Анонимные типы в VB.NET

Print Friendly, PDF & Email
Анонимные типы – это объекты, которые определяются локально в зоне видимости метода или класса и не имеют специального класса, в котором они описаны. Такие типы полезны когда нужно быстро создать какую-то структурированную сущность для хранения временных данных.

Давайте разберём создание и применение анонимного типа на примере, чтобы стало яснее.

Dim board1 As New With { .Title = "Arduino UNO", .PinsNumber = 32 }
Dim board2 = New With { .Title = "Arduino Nano", .PinsNumber = 30 }
Dim lst As New List(Of Object) From {board1, board2}
board2.PinsNumber = 10
For Each o As Object In lst
    Console.WriteLine(o)
    Console.WriteLine(o.GetType())
Next

Вот что мы увидим в выводе этого кода:

Вызов метода ToString() на анонимных типах в VB.NET

Здесь мы создали два анонимных объекта board1 и board2, не указав их тип. Компилятор не знает, что это за сущности. Но он понимает, что нам нужно, поэтому он неявно создаст поддерживающий класс VB$AnonymousType_0`2 (название может меняться), который содержит свойства Title и PinsNumber типов System.String и System.Integer, соответственно. Структуру анонимного типа компилятор узнаёт по конструктору, который мы вызываем. Надо иметь в виду, что если бы конструкторы анонимных типов имели разную сигнатуру, то были бы созданы несколько различных поддерживающих классов, по числу различных конструкторов анонимных объектов. Также обратите внимание, что мы использовали два разных синтаксиса при создании анонимных типов: "As New" и "= New".

В C# также имеются анонимные типы, и свойства этих объектов в C# предназначены только для чтения. В VB.NET же свойства можно менять в течение жизни такого объекта, что демонстрирует строка, где мы изменили число выводов Arduino Nano после создания объекта.

Названия поддерживающих типов компилятор выбирает на своё усмотрение и управлять этим нельзя. Зато анонимные типы могут хранить другие анонимные типы, это не возбраняется. Анонимные типы наследуются от типа System.Object.

Теги :

Поблагодарить автора:

Поделиться

Print Friendly, PDF & Email