Przejdź do treści stopki
POMOC .NET

C# Action (jak to działa dla programistów)

W tym samouczku nauczymy Cię pojęć C# Action, delegat Func i powiązanych tematów. Przewodnik ten jest przeznaczony dla początkujących i poprowadzi Cię przez podstawy, zapewni przykłady i wyjaśni kluczowe pojęcia delegatu action.

Zacznijmy od zrozumienia, czym są delegaty w C#. Przeglądamy bibliotekę IronPDF później w artykule.

Zrozumienie delegatów w C

Delegaty są konstrukcją programistyczną, która działa jako odniesienia do metod, zdefiniowane przez określony zestaw parametrów i typ zwrotny, enkapsulując funkcjonalności, takie jak predefiniowany typ delegatu i pozwalając metodom na zwracanie wartości.

Pozwala na przekazywanie metod jako argumentów. W zasadzie delegat służy jako wskaźnik funkcji, wskazując na metodę, którą reprezentuje. W C# istnieją dwa predefiniowane typy delegatów, które są szeroko stosowane: Func i Action.

Co to jest delegat Func?

Delegat Func reprezentuje metodę, która może mieć wartość zwrotną. Ostatni parametr typu określa typ zwrotny, a wcześniejsze typy określają parametry wejściowe.

Na przykład Func<int, int, string> przyjmuje dwa parametry całkowitoliczbowe i zwraca komunikat w postaci łańcucha.

Delegaty w praktyce: Przykłady

Przyjrzyjmy się kilku przykładowym zastosowaniom, aby zrozumieć, jak działają delegaty Func i Action w C#.

Przykład użycia delegatu Action

Delegat Action, predefiniowany typ delegatu, jest używany, gdy chcemy uruchomić metodę, która nie zwraca specyficznej wartości, skupiając się bardziej na operacjach. Oto podstawowy przykład:

Action<string> display = message => Console.WriteLine(message);
display("Hello, World!");
Action<string> display = message => Console.WriteLine(message);
display("Hello, World!");
Dim display As Action(Of String) = Sub(message) Console.WriteLine(message)
display("Hello, World!")
$vbLabelText   $csharpLabel

Ten kod definiuje delegata Action, ilustrując użycie metody anonimowej, która przyjmuje pojedynczy parametr typu string i wyświetla go w konsoli. Symbol => jest używany do definiowania wyrażenia lambda, które jest zwięzłym sposobem pisania metod anonimowych.

Przykład użycia delegatu Func

Delegat Func, który zwraca wartość, może być użyty w następujący sposób:

Func<int, int, int> add = (x, y) => x + y;
int result = add(5, 3);
Console.WriteLine(result);
Func<int, int, int> add = (x, y) => x + y;
int result = add(5, 3);
Console.WriteLine(result);
Dim add As Func(Of Integer, Integer, Integer) = Function(x, y) x + y
Dim result As Integer = add(5, 3)
Console.WriteLine(result)
$vbLabelText   $csharpLabel

Przykład ten tworzy delegata Func, który przyjmuje dwa parametry całkowitoliczbowe i zwraca ich sumę. Suma zostanie wyświetlona na konsoli w następujący sposób:

C# Action (Jak to działa dla programistów): Rysunek 1

Kluczowe pojęcia

Metody anonimowe

Metody anonimowe w C# zapewniają sposób definiowania metod w linii bez nazwy. Często są używane z delegatami do tworzenia instancji delegatów bezpośrednio.

Wyrażenia lambda

Wyrażenia lambda to skrótowy sposób pisania metod anonimowych. Pozwalają na pisanie mniejszej ilości kodu przy osiąganiu tego samego rezultatu.

Delegaty generyczne

Delegat generyczny może pracować z dowolnym typem danych. Func i Action są przykładami delegatów generycznych, zapewniając większą elastyczność, poprzez umożliwienie określenia typów wejściowych i wyjściowych w czasie wykonywania.

Instancja delegata

Instancja delegata jest tworzona za pomocą słowa kluczowego new lub po prostu przez przypisanie metody odpowiadającej sygnaturze delegata.

Przestrzeń nazw System

Przestrzeń nazw System w .NET zawiera wbudowane typy, takie jak Func i Action, które są częścią biblioteki klas podstawowych.

Programowanie asynchroniczne z delegatami

Delegaty, w tym Action i Func, są integralną częścią zarządzania zadaniami asynchronicznymi w C#. Pozwalają programistom enkapsulować odniesienie do metody, która następnie może być wykonywana asynchronicznie. Oznacza to, że główny wątek aplikacji może zainicjować zadanie, a następnie kontynuować innymi działaniami, aż zadanie zostanie ukończone.

W tym momencie wywoływana jest metoda zwrotna, na którą wskazuje delegat, aby obsłużyć wynik. Ten wzorzec jest istotny dla tworzenia responsywnych interfejsów użytkownika, które pozostają interaktywne nawet przy wykonywaniu długotrwałych operacji.

Przykład: Asynchroniczne przetwarzanie plików

Weźmy pod uwagę aplikację, która musi przetworzyć duży plik. Użycie delegatu Action w połączeniu z asynchronicznymi wzorcami programowania, takimi jak Task, może znacznie poprawić wydajność aplikacji:

public async Task ProcessFileAsync(string filePath, Action<string> onComplete)
{
    // Asynchronously read file content
    string fileContent = await File.ReadAllTextAsync(filePath);
    // Process the file content here (omitted for brevity)

    // Once processing is complete, invoke the onComplete callback
    onComplete?.Invoke("File processing completed successfully.");
}
public async Task ProcessFileAsync(string filePath, Action<string> onComplete)
{
    // Asynchronously read file content
    string fileContent = await File.ReadAllTextAsync(filePath);
    // Process the file content here (omitted for brevity)

    // Once processing is complete, invoke the onComplete callback
    onComplete?.Invoke("File processing completed successfully.");
}
Public Async Function ProcessFileAsync(ByVal filePath As String, ByVal onComplete As Action(Of String)) As Task
	' Asynchronously read file content
	Dim fileContent As String = Await File.ReadAllTextAsync(filePath)
	' Process the file content here (omitted for brevity)

	' Once processing is complete, invoke the onComplete callback
	If onComplete IsNot Nothing Then
		onComplete.Invoke("File processing completed successfully.")
	End If
End Function
$vbLabelText   $csharpLabel

W tym przykładzie użyto File.ReadAllTextAsync, aby odczytać zawartość pliku bez blokowania głównego wątku. Gdy plik zostanie przetworzony, wywoływany jest delegat onComplete, aby powiadomić odbiorcę, że operacja została zakończona, co pozwala na przeprowadzenie dalszych działań, takich jak aktualizacja interfejsu użytkownika czy rejestrowanie wyników.

Wprowadzenie do IronPDF: biblioteka PDF w C

IronPDF to wszechstronna biblioteka PDF dla C# przeznaczona dla programistów .NET, umożliwiająca tworzenie, edytowanie i manipulowanie plikami PDF w prosty sposób. Wyróżnia się silnikiem renderującym opartym na Chrome, zapewniającym projekcję perfekcyjnych pikseli PDF z treści HTML, CSS, JavaScript i obrazów.

IronPDF jest kompatybilny z szeroką gamą frameworków i środowisk .NET, w tym .NET Standard, .NET Framework i .NET Core, na platformach Windows, Linux i macOS.

Instalacja IronPDF

Aby wcielić IronPDF do swoich projektów .NET, możesz użyć NuGet, który jest najprostszą metodą. Otwórz konsolę Menedżera Pakietów w Visual Studio i uruchom następujące polecenie:

Install-Package IronPdf

To polecenie pobiera i instaluje pakiet IronPDF, konfigurując Twój projekt do rozpoczęcia używania IronPDF do generowania i manipulowania PDF.

Przykład kodu z Delegatem Action

Oto prosty przykład pokazujący, jak używać IronPDF w połączeniu z delegatem Action do wykonania zadania generowania PDF:

using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // Define an Action delegate that takes HTML content as a string
        Action<string> generatePdf = html =>
        {
            // Render the HTML as a PDF
            var pdf = renderer.RenderHtmlAsPdf(html);

            // Save the PDF to a file
            pdf.SaveAs("example.pdf");
        };

        // Generate the PDF with the provided HTML
        generatePdf("<p>Hello, world!</p>");
        Console.WriteLine("PDF generated successfully.");
    }
}
using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // Define an Action delegate that takes HTML content as a string
        Action<string> generatePdf = html =>
        {
            // Render the HTML as a PDF
            var pdf = renderer.RenderHtmlAsPdf(html);

            // Save the PDF to a file
            pdf.SaveAs("example.pdf");
        };

        // Generate the PDF with the provided HTML
        generatePdf("<p>Hello, world!</p>");
        Console.WriteLine("PDF generated successfully.");
    }
}
Imports IronPdf
Imports System

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' Define an Action delegate that takes HTML content as a string
		Dim generatePdf As Action(Of String) = Sub(html)
			' Render the HTML as a PDF
			Dim pdf = renderer.RenderHtmlAsPdf(html)

			' Save the PDF to a file
			pdf.SaveAs("example.pdf")
		End Sub

		' Generate the PDF with the provided HTML
		generatePdf("<p>Hello, world!</p>")
		Console.WriteLine("PDF generated successfully.")
	End Sub
End Class
$vbLabelText   $csharpLabel

Przykład ten definiuje delegata Action, który przyjmuje łańcuch HTML i wykorzystuje IronPDF do renderowania go w dokument PDF. Wygenerowany PDF jest następnie zapisywany w systemie plików. Podejście to demonstruje, jak można używać delegatów do enkapsulowania logiki generowania PDF, czyniąc Twój kod bardziej modułowym i elastycznym.

C# Action (Jak to działa dla programistów): Rysunek 2

Licencjonowanie

C# Action (Jak to działa dla programistów): Rysunek 3

IronPDF oferuje różne opcje licencjonowania dla programistów, począwszy od licencji dla pojedynczych programistów po umowy typu enterprise. Ceny tych licencji zaczynają się od $799.

Wnioski

Do tej pory powinieneś mieć podstawowe zrozumienie delegatów Action i Func w C#, wraz z tym jak używać metod anonimowych i wyrażeń lambda. Pamiętaj, że praktyka jest kluczem do opanowania koncepcji delegatów. Spróbuj utworzyć własne przykłady definiowania, przypisywania i wywoływania delegatów.

Możesz dowolnie eksplorować możliwości IronPDF z jego bezpłatną wersją próbną. Jeśli produkt spełnia wymagania Twojego projektu, możesz zabezpieczyć licencję, z cenami rozpoczynającymi się od $799.

Często Zadawane Pytania

Co to jest delegat Action w C#?

Delegat Action w C# to wstępnie zdefiniowany typ delegata używany do wykonania metody, która nie zwraca wartości. Jest często używany do operacji, w których wynik nie musi być zwracany.

Jak mogę użyć delegatu Func w C#?

Delegat Func jest używany do enkapsulacji metody, która zwraca wartość. Typ zwracany określasz jako ostatni parametr. Jest przydatny w metodach, w których konieczne jest zwrócenie obliczonego wyniku.

Jaka jest różnica między delegatami Func a Action?

Główna różnica polega na tym, że delegat Func zwraca wartość, podczas gdy delegat Action nie zwraca. Func jest używany, gdy metoda musi zwrócić wynik, podczas gdy Action służy do procedur bez wartości zwrotnej.

Jak mogę utworzyć plik PDF w aplikacji C#?

Możesz utworzyć PDF w aplikacji C# używając IronPDF. Pozwala on generować pliki PDF przy użyciu silnika renderowania opartego na Chrome i może być zintegrowany z aplikacjami .NET przy użyciu delegatów.

Czym są wyrażenia lambda w C# i jak są związane z delegatami?

Wyrażenia lambda to zwięzły sposób na pisanie metod inline, często używanych z delegatami do uproszczenia kodu. Pozwalają na zwięzłe wyrażanie metod i są często używane z delegatami Action i Func.

Jak mogę obsługiwać zadania asynchroniczne w C# używając delegatów?

Delegaty takie jak Action i Func mogą być używane do enkapsulacji metod wykonywanych asynchronicznie. Takie podejście pozwala aplikacji wykonywać inne operacje podczas oczekiwania na zakończenie zadań, poprawiając wydajność i responsywność.

Jak zainstalować bibliotekę C# do tworzenia PDF w projekcie .NET?

Aby zainstalować bibliotekę, taką jak IronPDF, w swoim projekcie .NET, użyj NuGet w konsoli menedżera pakietów z poleceniem: Install-Package IronPdf. Przygotowuje to Twój projekt do tworzenia i manipulacji plikami PDF.

Czym są metody anonimowe w C#?

Anonimowe metody pozwalają definiować metody inline bez nazwy, często używane z delegatami do tworzenia instancji delegatów bezpośrednio. Stanowią sposób przekazywania bloków kodu jako parametrów.

Czym jest delegat generyczny w C#?

Delegaty generyczne to delegaty, które mogą używać dowolnego typu danych. Func i Action to przykłady delegatów generycznych, ponieważ pozwalają określić typy parametrów wejścia i wyjścia w czasie wykonywania.

Czym jest przestrzeń nazw System w .NET i jakie ma znaczenie?

Przestrzeń nazw System w .NET zawiera podstawowe typy i klasy jak Func i Action, które są częścią biblioteki bazowej i zapewniają podstawowe funkcjonalności wymagane do tworzenia aplikacji C#.

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