Przejdź do treści stopki
POMOC .NET

C# Obiekt anonimowy (Jak to działa dla deweloperów)

Wprowadzenie do obiektów anonimowych

Typy anonimowe w języku C# zapewniają mechanizm enkapsulacji publicznych właściwości tylko do odczytu w pojedynczym obiekcie typu anonimowego bez konieczności jawnego definiowania formalnej deklaracji klasy. Są one przydatne do tworzenia struktur danych jednorazowego użytku. Są to typy generowane przez kompilator, które wywodzą się bezpośrednio z System.Object, skutecznie hermetyzując właściwości obiektów i służąc jako lekkie, niezmienne kontenery danych. Typy te są klasami zamkniętymi, w których kompilator automatycznie wnioskuje i generuje nazwę typu, która pozostaje niedostępna na poziomie kodu źródłowego. Poznamy również IronPDF jako bibliotekę PDF dla projektów .NET.

Kluczowe cechy

  • Typy anonimowe mają ściśle ograniczone możliwości:
  • Właściwości są automatycznie implementowane jako publiczne i tylko do odczytu w ramach definicji właściwości typu anonimowego.
  • Użytkownicy nie mogą w nich jawnie definiować metod, zdarzeń ani innych elementów klasy, takich jak metody Equals lub GetHashCode.
  • Nie można inicjować za pomocą wartości null, funkcji anonimowych ani typów wskaźników, co zapewnia integralność typów anonimowych.

Typowe przypadki użycia

Operacje LINQ

Obiekty typu anonimowego doskonale sprawdzają się w wyrażeniach zapytań LINQ, szczególnie w klauzulach select dla obiektów typu anonimowego, gdzie skutecznie zwracają określone podzbiory właściwości z większych obiektów. Takie podejście optymalizuje wykorzystanie pamięci poprzez tworzenie obiektów tymczasowych zawierających wyłącznie niezbędne dane.

Tymczasowe grupowanie danych

Służą one jako wydajne kontenery dla tymczasowych struktur danych, gdy tworzenie formalnej klasy byłoby nadmiernym obciążeniem. Jest to szczególnie przydatne w przypadku krótkotrwałych transformacji danych lub obliczeń pośrednich.

Enkapsulacja właściwości

Typ danych Anonymous zapewnia przejrzysty sposób grupowania powiązanych właściwości obiektów przy użyciu właściwości tylko do odczytu. Kompilator zapewnia bezpieczeństwo typów, zachowując jednocześnie zwięzłą składnię dostępu do właściwości.

Składnia i struktura

Tworzenie typów anonimowych odbywa się według określonego wzorca z wykorzystaniem słowa kluczowego var wraz z operatorem new i składnią inicjalizatora obiektu. Kompilator automatycznie generuje nazwę typu, która pozostaje niedostępna na poziomie kodu źródłowego.

var person = new { FirstName = "Iron", LastName = "Dev", Age = 35 }; // public int age in this anonymous type
var person = new { FirstName = "Iron", LastName = "Dev", Age = 35 }; // public int age in this anonymous type
Private person = New With {
	Key .FirstName = "Iron",
	Key .LastName = "Dev",
	Key .Age = 35
}
$vbLabelText   $csharpLabel

Zasady inicjalizacji właściwości

Kompilator egzekwuje ścisłe zasady dotyczące inicjalizacji właściwości w typach anonimowych. Wszystkie właściwości muszą zostać zainicjowane podczas tworzenia obiektu i nie można im przypisywać wartości null ani typów wskaźników. Po zainicjowaniu wartości właściwości są dostępne przy użyciu standardowej notacji kropkowej, ale nie można ich modyfikować po inicjalizacji ze względu na ich charakter tylko do odczytu.

Wnioskowanie o typie i dopasowywanie

var person1 = new { Name = "Iron", Age = 30 };
var person2 = new { Name = "Dev", Age = 25 };
var person1 = new { Name = "Iron", Age = 30 };
var person2 = new { Name = "Dev", Age = 25 };
Dim person1 = New With {
	Key .Name = "Iron",
	Key .Age = 30
}
Dim person2 = New With {
	Key .Name = "Dev",
	Key .Age = 25
}
$vbLabelText   $csharpLabel

Kompilator generuje identyczne informacje o typach dla typów anonimowych o pasujących nazwach właściwości, typach i kolejności. Pozwala to na kompatybilność typów między instancjami używanymi w kolekcjach lub przekazywanymi jako parametry metod w ramach tego samego zestawu.

Zagnieżdżone typy anonimowe

Typy danych anonimowych obsługują złożone struktury zagnieżdżone z właściwościami obiektów typu anonimowego. Jest to pomocne przy tworzeniu hierarchicznych reprezentacji danych:

var student = new {
    Id = 1,
    PersonalInfo = new {
        Name = "James",
        Contact = new {
            Email = "james@email.com",
            Phone = "123-456-7890"
        }
    },
    Grades = new { Math = 95, Science = 88 }
};
var student = new {
    Id = 1,
    PersonalInfo = new {
        Name = "James",
        Contact = new {
            Email = "james@email.com",
            Phone = "123-456-7890"
        }
    },
    Grades = new { Math = 95, Science = 88 }
};
Dim student = New With {
	Key .Id = 1,
	Key .PersonalInfo = New With {
		Key .Name = "James",
		Key .Contact = New With {
			Key .Email = "james@email.com",
			Key .Phone = "123-456-7890"
		}
	},
	Key .Grades = New With {
		Key .Math = 95,
		Key .Science = 88
	}
}
$vbLabelText   $csharpLabel

Operacje na zbiorach

Typy anonimowe sprawdzają się doskonale w scenariuszach związanych z manipulacją kolekcjami i transformacją danych:

var items = new[] {
    new { ProductId = 1, Name = "Laptop", Price = 1200.00m },
    new { ProductId = 2, Name = "Mouse", Price = 25.99m },
    new { ProductId = 3, Name = "Keyboard", Price = 45.50m }
};
var items = new[] {
    new { ProductId = 1, Name = "Laptop", Price = 1200.00m },
    new { ProductId = 2, Name = "Mouse", Price = 25.99m },
    new { ProductId = 3, Name = "Keyboard", Price = 45.50m }
};
Dim items = {
	New With {
		Key .ProductId = 1,
		Key .Name = "Laptop",
		Key .Price = 1200.00D
	},
	New With {
		Key .ProductId = 2,
		Key .Name = "Mouse",
		Key .Price = 25.99D
	},
	New With {
		Key .ProductId = 3,
		Key .Name = "Keyboard",
		Key .Price = 45.50D
	}
}
$vbLabelText   $csharpLabel

IronPDF: biblioteka PDF dla języka C

IronPDF to potężna biblioteka do generowania, edycji i zarządzania dokumentami PDF w aplikacjach .NET. Podczas pracy z językiem C# programiści często używają obiektów anonimowych do tworzenia lekkich i doraźnych struktur danych, zwłaszcza w sytuacjach, w których tworzenie całej klasy nie jest konieczne. Te anonimowe obiekty można płynnie wykorzystywać z IronPDF do dynamicznego tworzenia dokumentów PDF. Pomaga to w tworzeniu elastycznego rozwiązania do szybkiego przetwarzania danych do formatu PDF. Oto przykład ilustrujący, jak IronPDF współpracuje z obiektami anonimowymi:

Przykład: Wykorzystanie obiektów anonimowych do wypełnienia pliku PDF

Wyobraź sobie, że masz listę danych dotyczących sprzedaży, którą chcesz przedstawić w formie tabeli w pliku PDF. Zamiast tworzyć formalną klasę, można użyć obiektu anonimowego, aby szybko sformatować dane do renderowania.

using IronPdf;
using System;
using System.Linq;

class Program
{
    static void Main()
    {
        // Set your IronPDF license key here
        License.LicenseKey = "Your-Licence-Key";

        // Sample data using anonymous objects
        var salesData = new[]
        {
            new { Product = "Laptop", Quantity = 2, Price = 1200.50 },
            new { Product = "Smartphone", Quantity = 5, Price = 800.00 },
            new { Product = "Headphones", Quantity = 10, Price = 150.75 }
        };

        // Create an HTML string dynamically using the anonymous object data
        var htmlContent = @"
        <html>
        <head><style>table {border-collapse: collapse;} th, td {border: 1px solid black; padding: 5px;}</style></head>
        <body>
        <h1>Sales Report</h1>
        <table>
            <thead>
                <tr>
                    <th>Product</th>
                    <th>Quantity</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>
                " +
            string.Join("", salesData.Select(item =>
                $"<tr><td>{item.Product}</td><td>{item.Quantity}</td><td>{item.Price:C}</td></tr>")) +
            @"
            </tbody>
        </table>
        </body>
        </html>";

        // Generate the PDF
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF
        pdf.SaveAs("SalesReport.pdf");
        Console.WriteLine("PDF generated successfully!");
    }
}
using IronPdf;
using System;
using System.Linq;

class Program
{
    static void Main()
    {
        // Set your IronPDF license key here
        License.LicenseKey = "Your-Licence-Key";

        // Sample data using anonymous objects
        var salesData = new[]
        {
            new { Product = "Laptop", Quantity = 2, Price = 1200.50 },
            new { Product = "Smartphone", Quantity = 5, Price = 800.00 },
            new { Product = "Headphones", Quantity = 10, Price = 150.75 }
        };

        // Create an HTML string dynamically using the anonymous object data
        var htmlContent = @"
        <html>
        <head><style>table {border-collapse: collapse;} th, td {border: 1px solid black; padding: 5px;}</style></head>
        <body>
        <h1>Sales Report</h1>
        <table>
            <thead>
                <tr>
                    <th>Product</th>
                    <th>Quantity</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>
                " +
            string.Join("", salesData.Select(item =>
                $"<tr><td>{item.Product}</td><td>{item.Quantity}</td><td>{item.Price:C}</td></tr>")) +
            @"
            </tbody>
        </table>
        </body>
        </html>";

        // Generate the PDF
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF
        pdf.SaveAs("SalesReport.pdf");
        Console.WriteLine("PDF generated successfully!");
    }
}
Imports IronPdf
Imports System
Imports System.Linq

Friend Class Program
	Shared Sub Main()
		' Set your IronPDF license key here
		License.LicenseKey = "Your-Licence-Key"

		' Sample data using anonymous objects
		Dim salesData = {
			New With {
				Key .Product = "Laptop",
				Key .Quantity = 2,
				Key .Price = 1200.50
			},
			New With {
				Key .Product = "Smartphone",
				Key .Quantity = 5,
				Key .Price = 800.00
			},
			New With {
				Key .Product = "Headphones",
				Key .Quantity = 10,
				Key .Price = 150.75
			}
		}

		' Create an HTML string dynamically using the anonymous object data
		Dim htmlContent = "
        <html>
        <head><style>table {border-collapse: collapse;} th, td {border: 1px solid black; padding: 5px;}</style></head>
        <body>
        <h1>Sales Report</h1>
        <table>
            <thead>
                <tr>
                    <th>Product</th>
                    <th>Quantity</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>
                " & String.Join("", salesData.Select(Function(item) $"<tr><td>{item.Product}</td><td>{item.Quantity}</td><td>{item.Price:C}</td></tr>")) & "
            </tbody>
        </table>
        </body>
        </html>"

		' Generate the PDF
		Dim renderer = New ChromePdfRenderer()
		Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)

		' Save the PDF
		pdf.SaveAs("SalesReport.pdf")
		Console.WriteLine("PDF generated successfully!")
	End Sub
End Class
$vbLabelText   $csharpLabel

Obiekt anonimowy w języku C# (jak to działa dla programistów): Rysunek 1 — Wynik działania konsoli z powyższego przykładu kodu

Wnioski

C# Obiekt anonimowy (jak to działa dla programistów): Rysunek 2 – Strona licencji IronPDF

Typy anonimowe w języku C# zapewniają elastyczny i wydajny sposób tworzenia tymczasowych struktur danych bez konieczności formalnego deklarowania klas. Są one szczególnie przydatne podczas pracy z zapytaniami LINQ, transformacjami danych oraz bibliotekami takimi jak IronPDF. Połączenie typów anonimowych z możliwościami generowania plików PDF przez IronPDF stanowi potężne rozwiązanie do tworzenia dynamicznych, opartych na danych plików PDF przy minimalnym obciążeniu kodu.

IronPDF umożliwia programistom przetestowanie swoich funkcji w ramach bezpłatnej wersji próbnej, co ułatwia zapoznanie się z jego możliwościami w aplikacjach .NET. Licencje komercyjne zaczynają się od $799 i zapewniają dostęp do pełnego zestawu funkcji, w tym wysokowydajnego renderowania HTML do PDF, edycji plików PDF oraz funkcji bezpieczeństwa.

Często Zadawane Pytania

Co to są typy anonimowe w C#?

Typy anonimowe w C# zapewniają mechanizm do kapsułkowania publicznych właściwości tylko do odczytu w pojedynczym obiekcie anonimowym typu bez wyraźnego definiowania formalnej deklaracji klasy. Są to typy generowane przez kompilator używane jako lekkie, niezmienne kontenery danych.

Jak można utworzyć typ anonimowy w C#?

Aby utworzyć typ anonimowy w C#, należy użyć słowa kluczowego var z operatorem new i składnią inicjalizatora obiektów. Kompilator automatycznie generuje nazwę i strukturę typu na podstawie podanych właściwości.

Jak działają typy anonimowe z operacjami LINQ w C#?

Typy anonimowe doskonale sprawdzają się w wyrażeniach zapytań LINQ, szczególnie w klauzulach select, efektywnie zwracając konkretne podzbiory właściwości z większych obiektów, optymalizując użycie pamięci.

Czy typy anonimowe można używać w zagnieżdżonych strukturach?

Tak, typy anonimowe można używać w zagnieżdżonych strukturach. Pozwala to na tworzenie hierarchicznych reprezentacji danych, gdzie właściwości typu anonimowego mogą być same w sobie obiektami typu anonimowego.

Jak można użyć anonimowych obiektów do tworzenia dynamicznych plików PDF?

Anonimowe obiekty mogą szybko formatować dane do renderowania w dynamicznych PDF-ach. Łącząc je z biblioteką PDF, taką jak IronPDF, można efektywnie generować PDF-y przy minimalnej ilości kodu.

Jakie są ograniczenia typów anonimowych w C#?

Typy anonimowe są ograniczone do posiadania publicznych właściwości tylko do odczytu i nie mogą mieć metod, zdarzeń, ani jawnie zdefiniowanych członków klasy. Nie można ich również inicjować wartościami null ani typami wskaźnikowymi.

Jakie są wspólne przypadki użycia typów anonimowych?

Wspólne przypadki użycia typów anonimowych obejmują tymczasowe grupowanie danych, kapsułkowanie właściwości, oraz operacje na kolekcjach, gdzie tworzenie formalnej klasy byłoby nadmiarowe.

Jak biblioteki PDF mogą ulepszyć przepływy pracy z danymi na PDF w aplikacjach .NET?

Biblioteki PDF oferują solidne narzędzia do generowania, edytowania i zarządzania dokumentami PDF w aplikacjach .NET, ułatwiając efektywne przepływy pracy z danymi na PDF i ulepszając rozwiązania oparte na danych.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie