Typy anonimowe (Przewodnik programowania w języku C#)

Typy anonimowe zapewniają dogodny Hermetyzowanie zestaw właściwości tylko do odczytu w jeden obiekt bez konieczności jawnie zdefiniować typ najpierw.Nazwa typu jest generowany przez kompilator i nie jest dostępny na poziomie kodu źródłowego.Typ każdej właściwości jest wykryta przez kompilator.

Typy anonimowe jest tworzone przy użyciu nowy operator wraz z programem inicjatora obiektu.Aby uzyskać więcej informacji o obiekcie inicjatory, zobacz Inicjatory obiektów i kolekcji (Przewodnik programowania w języku C#).

W poniższym przykładzie przedstawiono typ anonimowy inicjowany z dwóch właściwości o nazwie Amount i Message.

var v = new { Amount = 108, Message = "Hello" };

// Rest the mouse pointer over v.Amount and v.Message in the following
// statement to verify that their inferred types are int and string.
Console.WriteLine(v.Amount + v.Message);

Typy anonimowe są zwykle używanych w wybierz klauzuli wyrażenia zapytania do zwrócenia podzbiór właściwości wszystkich obiektów w sekwencji źródłowej.Aby uzyskać więcej informacji dotyczących kwerend, zobacz Wyrażenia kwerend LINQ (Przewodnik programowania w języku C#).

Typy anonimowe zawiera co najmniej jeden publiczny właściwości tylko do odczytu.Nie inne rodzaje składowych klasy, takie jak metody lub zdarzenia, są prawidłowe.Wyrażenie, które służy do inicjowania właściwość, która nie może być null, funkcja anonimowa lub typ wskaźnika.

Najbardziej typowe scenariusz jest zainicjowania anonimowy typ o właściwości z innego typu.W poniższym przykładzie założyć, że klasa o nazwie istnieje Product.Klasa Product obejmuje Color i Price właściwości, łącznie z innych właściwości, które nie są zainteresowani.Zmienna products to zbiór Product obiektów.Rozpoczyna się od deklaracji typu anonimowego new słowo kluczowe.Deklaracja inicjuje nowego typu, który używa tylko dwóch właściwości z Product.Powoduje to mniejszą ilość danych ma zostać zwrócona w zapytaniu.

Jeśli nie określisz nazwy elementów członkowskich w typie anonimowy, kompilator zapewnia elementów członkowskich typu anonimowego taką samą nazwę jak używane do zainicjowania ich właściwości.Musisz podać nazwę właściwości, która jest inicjowany z wyrażeniem, jak pokazano w poprzednim przykładzie.W poniższym przykładzie nazwy właściwości typu anonimowego są Color i Price.

var productQuery = 
    from prod in products
    select new { prod.Color, prod.Price };

foreach (var v in productQuery)
{
    Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price);
}

Zwykle, korzystając z anonimowy typ można zainicjować zmienną, deklarowania jako niejawnie typizowaną zmiennej lokalnej przy użyciu var.Nie można określić nazwę typu deklaracja zmiennej, ponieważ tylko kompilator ma dostęp do podstawowej nazwę typu anonimowego.Aby dowiedzieć się więcej o obiekcie var, zobacz Niejawnie wpisane zmienne lokalne (Przewodnik programowania w języku C#).

Możesz tworzyć tablicy elementów anonimowo typizowany, łącząc niejawnie typizowaną zmiennej lokalnej i tablicą niejawnie określonego typu, jak pokazano w następującym przykładzie.

var anonArray = new[] { new { name = "apple", diam = 4 }, new { name = "grape", diam = 1 }};

Uwagi

Typy anonimowe są klasy typów wyprowadzonych bezpośrednio za pomocą obiektu, i nie można rzutować do dowolnego typu, z wyjątkiem obiektu.Kompilator zawiera nazwę dla każdego typu anonimowego, mimo że aplikacja nie może uzyskać do niego dostęp.Z punktu widzenia aparatu plików wykonywalnych języka wspólnego, typ anonimowy nie różni się od dowolnego typu odwołania.

Jeśli co najmniej dwa inicjatory obiekt anonimowy w zestawie Określa sekwencję właściwości, które znajdują się w tej samej kolejności i mają te same nazwy i typy, kompilator traktuje obiekty jako wystąpień tego samego typu.Mają te same informacje wygenerowane kompilatora typu.

Nie można zadeklarować pola, właściwość, zdarzenie lub typ zwrotny metody jako typu anonimowego.Podobnie nie można zadeklarować posiadanie parametru metody, właściwości, konstruktora lub indeksatora jako typu anonimowego.Aby przekazać typ anonimowy lub kolekcję, która zawiera typy anonimowe jako argument do metody, można zadeklarować parametr jako obiekt typu.Jednak w ten sposób defeats przeznaczenie wpisując silne.Należy przechowywać wyników zapytania lub przekazanie ich poza granicami metody, można skorzystać zwykłych nazwanych pole struktury lub klasy zamiast typ anonimowy.

Ponieważ Equals i GetHashCode metody na anonimowy typy są definiowane w zakresie Equals i GetHashCode metody właściwości dwa wystąpienia tego samego typu anonimowego są takie same, tylko wtedy, gdy ich właściwości są takie same.

Zobacz też

Informacje

Inicjatory obiektów i kolekcji (Przewodnik programowania w języku C#)

Koncepcje

Przewodnik programowania w języku C#

Wyrażenia kwerend LINQ (Przewodnik programowania w języku C#)

Inne zasoby

Wprowadzenie do korzystania z LINQ w C#