czwartek, 11 sierpnia 2016

Typ anonimowy

Omówione zostały typy wartościowe, typ referencyjny, struktury oraz typ wyliczeniowy. Pozostał jeszcze typ anonimowy, będący grupą wartości zapisaną w właściwościach. Instancję typu anonimowego tworzymy, korzystając ze słowa kluczowego new, ale zamiast podawać nazwę typu, wewnątrz nawiasów klamrowych podajemy kolekcję par nazwa-wartość. Poniżej znajduje się przykład.

var x0 = new { Name = "R2-D2", Origin = "Naboo" };

W przypadku typu anonimowego to kompilator generuje klasę, udostępniając właściwości, które są tylko do odczytu. W naszym przykładzie wygenerowana została klasa o nazwie <>f__AnonymousType0`2, zawierająca właściwości: Name oraz Origin typu string. Sama nazwa klasy nie jest prawidłowym identyfikatorem, gdyż rozpoczyna się znakami <>. Kompilator tworzy ją w ten sposób, aby mieć pewność, że nie będzie ona kolidować z innym identyfikatorem. Takie identyfikatory określane są mianem nazw niewyobrażalnych. Typ właściwości określony jest automatycznie na podstawie wyrażenia inicjalizatora, identycznie jak podczas użycia słowa kluczowego var. Kompilator oprócz właściwości generuje również metodę Equals, w taki sposób, aby możliwe było porównywanie instancji na podstawie ich wartości.

Typy anonimowe zostały dodane do języka na potrzeby technologii LINQ, a ich zastosowanie ogranicza się głównie do definiowania niestandardowych kryteriów wyszukiwania czy grupowania.

Troska Robert