Przejdź do treści stopki
POMOC .NET

Parametry domyślne w języku C# (jak to działa dla programistów)

Dzisiaj zagłębimy się w świat języka C# i poznamy potężną funkcję — parametry domyślne. Przedstawimy to w przystępny sposób, skupiając się na koncepcji wartości domyślnej argumentu i argumentów opcjonalnych w języku C#.

Czym są parametry domyślne?

W języku C# parametry domyślne, znane również jako parametry opcjonalne, pozwalają przypisać wartość do stałych argumentów w definicji metody. Jeśli podczas wywołania funkcji nie zostanie podany argument dla tego parametru, zostanie użyta wartość domyślna.

W definicji metody ustawiono domyślną wartość parametru, jak pokazano w poniższym fragmencie kodu:

public void Greet(string name = "Friend")
{
    Console.WriteLine("Hello, " + name);
}
public void Greet(string name = "Friend")
{
    Console.WriteLine("Hello, " + name);
}
Public Sub Greet(Optional ByVal name As String = "Friend")
	Console.WriteLine("Hello, " & name)
End Sub
$vbLabelText   $csharpLabel

W tym przypadku parametr name jest atrybutem opcjonalnym. Ciąg znaków "Friend" jest wartością domyślną. Jeśli wywołasz Greet() bez przekazania argumentu, jako wartość dla name zostanie użyte słowo "Friend".

Parametry wymagane i parametry opcjonalne

Wymagane parametry

Parametr wymagany to parametr, który musi zostać podany podczas wywołania funkcji lub metody. Nie ma wartości domyślnej, więc zawsze trzeba podać argument. Kompilator sprawdza wywołanie funkcji lub metody i jeśli wymagany parametr nie zostanie podany, zgłasza błąd kompilacji.

Rozważmy przykład:

// Method with required parameters
public void IntroduceYourself(string firstName, string lastName)
{
    Console.WriteLine("Hello, my name is " + firstName + " " + lastName);
}
// Method with required parameters
public void IntroduceYourself(string firstName, string lastName)
{
    Console.WriteLine("Hello, my name is " + firstName + " " + lastName);
}
' Method with required parameters
Public Sub IntroduceYourself(ByVal firstName As String, ByVal lastName As String)
	Console.WriteLine("Hello, my name is " & firstName & " " & lastName)
End Sub
$vbLabelText   $csharpLabel

W tej metodzie zarówno firstName, jak i lastName są parametrami wymaganymi. Podczas wywołania IntroduceYourself należy podać wartości dla obu parametrów. Jeśli pominiesz argumenty, pojawi się błąd kompilacji.

IntroduceYourself("John", "Doe"); // Following call is correct
// IntroduceYourself("John"); // Error: lastName is missing
IntroduceYourself("John", "Doe"); // Following call is correct
// IntroduceYourself("John"); // Error: lastName is missing
IntroduceYourself("John", "Doe") ' Following call is correct
' IntroduceYourself("John"); // Error: lastName is missing
$vbLabelText   $csharpLabel

Parametry opcjonalne

Z drugiej strony opcjonalne parametry zapewniają elastyczność. W definicji metody ustawiono wartość domyślną, która jest używana, gdy metoda jest wywoływana bez tego parametru.

Na przykład zmodyfikujmy metodę IntroduceYourself, aby parametr lastName stał się opcjonalny:

// Method with an optional parameter
public void IntroduceYourself(string firstName, string lastName = "Doe")
{
    Console.WriteLine("Hello, my name is " + firstName + " " + lastName);
}
// Method with an optional parameter
public void IntroduceYourself(string firstName, string lastName = "Doe")
{
    Console.WriteLine("Hello, my name is " + firstName + " " + lastName);
}
' Method with an optional parameter
Public Sub IntroduceYourself(ByVal firstName As String, Optional ByVal lastName As String = "Doe")
	Console.WriteLine("Hello, my name is " & firstName & " " & lastName)
End Sub
$vbLabelText   $csharpLabel

Teraz możesz wywołać IntroduceYourself, podając tylko parametr firstName. W takim przypadku lastName zostanie domyślnie ustawione na "Doe".

IntroduceYourself("John", "Smith"); // Outputs: Hello, my name is John Smith
IntroduceYourself("John");          // Outputs: Hello, my name is John Doe
IntroduceYourself("John", "Smith"); // Outputs: Hello, my name is John Smith
IntroduceYourself("John");          // Outputs: Hello, my name is John Doe
IntroduceYourself("John", "Smith") ' Outputs: Hello, my name is John Smith
IntroduceYourself("John") ' Outputs: Hello, my name is John Doe
$vbLabelText   $csharpLabel

Podanie argumentów opcjonalnych powoduje zastąpienie wartości domyślnej.

Należy pamiętać, że w deklaracji metody parametry wymagane muszą zawsze być wymienione przed parametrami opcjonalnymi.

Zrozumienie różnicy

Rozróżnienie między parametrami wymaganymi a opcjonalnymi jest istotne, ponieważ wpływa na sposób wywołania metody. Parametry opcjonalne zapewniają elastyczność, umożliwiając pominięcie wprowadzania określonych parametrów, gdy nie są one potrzebne. Z drugiej strony wymagane parametry zapewniają, że niezbędne dane są zawsze przekazywane do funkcji lub metody, co pomaga zapobiegać błędom wykonania.

Zasady korzystania z parametrów domyślnych

Podczas definiowania metody z parametrami domyślnymi należy pamiętać o kilku kluczowych zasadach:

  1. Wartość domyślna musi być wyrażeniem stałym. Nie można używać zmiennych ani wywołań metod.
  2. Wszystkie parametry opcjonalne muszą być zdefiniowane na końcu listy parametrów, po wszystkich wymaganych parametrach.
  3. Wywołując metodę z parametrami opcjonalnymi, można podać pominięte argumenty dla parametrów opcjonalnych w kolejności, w jakiej zostały zdefiniowane, lub użyć argumentów nazwanych.
  4. Jeśli nie podano wartości argumentu opcjonalnego, zostanie użyta wartość domyślna.

Rozważmy następujący fragment kodu dotyczący argumentów opcjonalnych:

static void Main(string[] args)
{
    ShowMessage("Hello");
    ShowMessage("Hello", "John");
}

public static void ShowMessage(string msg, string name = "Friend")
{
    Console.WriteLine(msg + ", " + name);
}
static void Main(string[] args)
{
    ShowMessage("Hello");
    ShowMessage("Hello", "John");
}

public static void ShowMessage(string msg, string name = "Friend")
{
    Console.WriteLine(msg + ", " + name);
}
Shared Sub Main(ByVal args() As String)
	ShowMessage("Hello")
	ShowMessage("Hello", "John")
End Sub

Public Shared Sub ShowMessage(ByVal msg As String, Optional ByVal name As String = "Friend")
	Console.WriteLine(msg & ", " & name)
End Sub
$vbLabelText   $csharpLabel

W metodzie Main wywołujemy ShowMessage dwukrotnie. Za pierwszym razem przekazujemy tylko jeden argument, więc parametr name przyjmuje wartość domyślną "Friend". Za drugim razem przekazujemy dwa argumenty, więc zamiast wartości domyślnej używamy "John".

Parametry nazwane i opcjonalne

C# obsługuje również parametry nazwane i opcjonalne. Parametry nazwane pozwalają określić wartość parametru na podstawie nazwy, a nie pozycji. Może to być pomocne, gdy metoda ma kilka opcjonalnych parametrów, a chcesz podać wartość dla jednego z nich, ale nie dla pozostałych.

W poniższym przykładzie ShowGreetings ma dwa opcjonalne parametry:

public static void ShowGreetings(string greeting = "Hello", string name = "Friend")
{
    Console.WriteLine(greeting + ", " + name);
}
public static void ShowGreetings(string greeting = "Hello", string name = "Friend")
{
    Console.WriteLine(greeting + ", " + name);
}
Public Shared Sub ShowGreetings(Optional ByVal greeting As String = "Hello", Optional ByVal name As String = "Friend")
	Console.WriteLine(greeting & ", " & name)
End Sub
$vbLabelText   $csharpLabel

Możemy wywołać tę metodę, podając tylko pierwszy parametr:

ShowGreetings("Hi");
ShowGreetings("Hi");
ShowGreetings("Hi")
$vbLabelText   $csharpLabel

Możemy też użyć argumentów nazwanych, aby podać wartość dla name, pomijając argument greeting:

ShowGreetings(name: "John");
ShowGreetings(name: "John");
ShowGreetings(name:= "John")
$vbLabelText   $csharpLabel

Jakie są zalety korzystania z parametrów nazwanych?

Parametry nazwane w języku C# zapewniają kilka korzyści:

  1. Improved Readability: Parametry nazwane mogą ułatwić czytanie i zrozumienie kodu. Określając nazwę parametru, jasno pokazujesz, co oznacza każdy argument. Może to być szczególnie przydatne w przypadku metod z wieloma parametrami.
  2. Flexible Argument Order: Dzięki parametrom nazwanym można podawać argumenty w dowolnej kolejności, a nie tylko w kolejności, w jakiej parametry pojawiają się w deklaracji metody. W niektórych przypadkach może to zwiększyć elastyczność kodu i poprawić jego czytelność.
  3. Ease with Optional Parameters: Parametry nazwane są często używane wraz z parametrami opcjonalnymi. Gdy metoda ma kilka parametrów opcjonalnych, można użyć parametrów nazwanych, aby podać wartości dla niektórych parametrów opcjonalnych, a dla innych nie. W ten sposób nie musisz podawać wartości dla każdego opcjonalnego parametru, a jedynie dla tych, które chcesz zmienić w stosunku do wartości domyślnych.

Oto kolejny przykład użycia parametrów nazwanych:

// Method Declaration
public void RegisterUser(string username, string password, string email = "", bool subscribeToNewsletter = false)
{
    // Method body
}

// Method Call
RegisterUser(username: "JohnDoe", password: "password123", subscribeToNewsletter: true);
// Method Declaration
public void RegisterUser(string username, string password, string email = "", bool subscribeToNewsletter = false)
{
    // Method body
}

// Method Call
RegisterUser(username: "JohnDoe", password: "password123", subscribeToNewsletter: true);
' Method Declaration
Public Sub RegisterUser(ByVal username As String, ByVal password As String, Optional ByVal email As String = "", Optional ByVal subscribeToNewsletter As Boolean = False)
	' Method body
End Sub

' Method Call
RegisterUser(username:= "JohnDoe", password:= "password123", subscribeToNewsletter:= True)
$vbLabelText   $csharpLabel

W powyższym kodzie email jest opcjonalnym parametrem, który pominęliśmy, a subscribeToNewsletter ustawiliśmy na true, mimo że jest to ostatni parametr na liście. Użycie parametru nazwanego jasno określa, co reprezentuje każdy argument, i pozwala nam określić tylko te argumenty, które chcemy podać.

Parametry domyślne i przeciążanie metod

Czym jest przeciążanie metod?

W języku C# przeciążanie metod, czyli przeciążanie funkcji, to funkcja, która pozwala zdefiniować wiele metod o tej samej nazwie, ale z innym zestawem parametrów. Pozwala to na wykonywanie różnych operacji przy użyciu tej samej nazwy metody, dzięki czemu kod staje się bardziej intuicyjny i łatwiejszy w użyciu.

Rozważmy następujący przykład kodu przedstawiający metody przeciążone:

public void DisplayMessage(string message)
{
    Console.WriteLine(message);
}

public void DisplayMessage(string message, string name)
{
    Console.WriteLine(message + ", " + name);
}
public void DisplayMessage(string message)
{
    Console.WriteLine(message);
}

public void DisplayMessage(string message, string name)
{
    Console.WriteLine(message + ", " + name);
}
Public Sub DisplayMessage(ByVal message As String)
	Console.WriteLine(message)
End Sub

Public Sub DisplayMessage(ByVal message As String, ByVal name As String)
	Console.WriteLine(message & ", " & name)
End Sub
$vbLabelText   $csharpLabel

W powyższym przykładzie metoda DisplayMessage jest przeciążona. Jedna wersja tej metody przyjmuje jeden parametr string, a druga dwa parametry string.

Używanie parametrów domyślnych zamiast przeciążania

Parametry domyślne często mogą być stosowane jako alternatywa dla przeciążania. Podając wartość domyślną dla parametru w metodzie, można umożliwić wywołującemu wybór, czy podać ten parametr. Dzięki temu Twoja metoda zyska taką samą elastyczność jak w przypadku przeciążania metod, ale przy mniejszej ilości kodu.

Oto jak można przerobić powyższy przykład, używając parametru domyślnego zamiast przeciążania:

public void DisplayMessage(string message, string name = "Friend")
{
    Console.WriteLine(message + ", " + name);
}
public void DisplayMessage(string message, string name = "Friend")
{
    Console.WriteLine(message + ", " + name);
}
Public Sub DisplayMessage(ByVal message As String, Optional ByVal name As String = "Friend")
	Console.WriteLine(message & ", " & name)
End Sub
$vbLabelText   $csharpLabel

Teraz DisplayMessage można wywołać z jednym lub dwoma argumentami:

DisplayMessage("Hello");
DisplayMessage("Hello", "John");
DisplayMessage("Hello");
DisplayMessage("Hello", "John");
DisplayMessage("Hello")
DisplayMessage("Hello", "John")
$vbLabelText   $csharpLabel

W pierwszym wywołaniu parametr name używa swojej wartości domyślnej "Friend". W drugim wywołaniu używany jest zamiast tego podany argument "John".

Należy pamiętać, że wartością domyślną dla parametru domyślnego musi być wyrażenie stałe, co oznacza, że nie może to być zmienna ani wywołanie metody. Wynika to z faktu, że wartość musi być znana w czasie kompilacji.

Pakiet oprogramowania Iron Suite

Przyjrzyjmy się pakietowi Iron Software, który obejmuje bibliotekę IronPDF do obsługi plików PDF, bibliotekę IronXL do operacji w Excelu w języku C#, IronOCR do zaawansowanego rozpoznawania tekstu oraz IronBarcode do generowania kodów kreskowych. Te potężne biblioteki zostały zaprojektowane specjalnie po to, by pomóc Ci rozszerzyć możliwości Twoich aplikacji napisanych w języku C#. Można je łatwo powiązać z koncepcjami omówionymi w artykule, w tym parametrami domyślnymi, specyfikacjami nazwanych argumentów i przeciążaniem metod.

IronPDF: Jest to biblioteka C# służąca do konwersji HTML do formatu PDF za pomocą IronPDF. Zrozumienie parametrów domyślnych i opcjonalnych może mieć kluczowe znaczenie podczas korzystania z IronPDF. Wiele metod w IronPDF będzie miało parametry opcjonalne, co pozwala na szerokie dostosowanie bez nadmiernego komplikowania sygnatur metod. Więcej informacji na ten temat można znaleźć w samouczku IronPDF dotyczącym konwersji HTML do PDF.

using IronPdf;

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

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

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

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

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

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

Biblioteka IronXL umożliwia aplikacji napisanej w języku C# odczytywanie, zapisywanie i przetwarzanie plików Excel w różnych formatach. Metody w IronXL mogą mieć różne parametry dotyczące takich kwestii, jak format zapisu pliku lub to, czy podczas importowania danych należy uwzględniać nagłówki. Można również zauważyć, że parametry nazwane i opcjonalne są szeroko stosowane do określania zakresów komórek, opcji formatowania i innych elementów.
IronOCR: zaawansowana biblioteka optycznego rozpoznawania znaków (OCR), która umożliwia odczytywanie tekstu i kodów kreskowych z obrazów i plików PDF w aplikacjach napisanych w języku C#. Metody IronOCR mogą posiadać opcjonalne parametry służące do kontrolowania różnych aspektów procesu OCR, takich jak język tekstu, poziom korekty błędów itp. Zrozumienie tych parametrów pozwala na lepszą kontrolę nad procesem OCR.
Biblioteka IronBarcode jest wszechstronnym narzędziem do odczytu i generowania kodów kreskowych w aplikacjach .NET. Również w tym przypadku kluczowe znaczenie ma zrozumienie parametrów domyślnych. Na przykład podczas generowania kodu kreskowego mogą być dostępne opcjonalne parametry pozwalające określić rozmiar, format lub wartość kodu kreskowego.

Wnioski

Podsumowując, opanowanie użycia parametrów domyślnych i opcjonalnych w języku C# może znacznie zwiększyć wydajność programowania i wszechstronność kodu. Te pojęcia są fundamentalne dla języka C#.

Mówiąc o tych bibliotekach, należy pamiętać, że ceny poszczególnych licencji zaczynają się od $799, a biblioteki te oferują również bezpłatną wersję próbną produktów Iron Software. Jednak firma Iron Software oferuje pakiet: można nabyć cały zestaw za cenę zaledwie dwóch pojedynczych licencji.

Często Zadawane Pytania

W jaki sposób parametry domyślne zwiększają wydajność kodu w języku C#?

Parametry domyślne w języku C# pozwalają programistom przypisywać predefiniowane wartości do argumentów metod, co zmniejsza potrzebę stosowania wielu przeciążeń metod i upraszcza utrzymanie kodu.

Czy w języku C# można używać parametrów domyślnych wraz z parametrami nazwanymi?

Tak, w języku C# parametry domyślne można łączyć z parametrami nazwanymi, co pozwala programistom na określenie tylko niezbędnych argumentów poprzez ich nazwy, zwiększając czytelność i elastyczność kodu.

Jakie są zalety korzystania z parametrów opcjonalnych w języku C#?

Parametry opcjonalne w języku C# zapewniają elastyczność, umożliwiając pominięcie niektórych argumentów w wywołaniach metod, dla których domyślnie przyjmowane są wartości predefiniowane, co upraszcza wywołanie metody i zmniejsza nadmiarowość kodu.

Czym różni się przeciążanie metod od używania parametrów domyślnych w języku C#?

Przeciążanie metod polega na tworzeniu wielu metod o tej samej nazwie, ale z różnymi parametrami, podczas gdy parametry domyślne pozwalają jednej metodzie obsługiwać wiele scenariuszy poprzez zapewnienie wartości zastępczych dla pominiętych argumentów.

Jakich zasad należy przestrzegać podczas korzystania z parametrów domyślnych w języku C#?

Kluczowe zasady obejmują zapewnienie, że wartości domyślne są wyrażeniami stałymi, umieszczanie parametrów opcjonalnych po wymaganych oraz używanie argumentów nazwanych do określenia pominiętych parametrów.

W jaki sposób parametry domyślne mogą zoptymalizować korzystanie z biblioteki IronPDF?

In IronPDF, parametry domyślne mogą usprawnić generowanie plików PDF, umożliwiając programistom dostosowanie ustawień, takich jak zawartość HTML lub ścieżki plików, bez konieczności określania każdego argumentu, co pozwala na efektywne dostosowanie wyników.

Jaką rolę odgrywają parametry nazwane w poprawianiu czytelności kodu?

Parametry nazwane pozwalają na określanie argumentów według nazwy, a nie pozycji, co sprawia, że kod jest bardziej czytelny i zmniejsza liczbę błędów związanych z kolejnością argumentów.

Dłączego opanowanie parametrów domyślnych ma kluczowe znaczenie dla programistów?

Opanowanie parametrów domyślnych ma kluczowe znaczenie, ponieważ zwiększa wydajność programowania, zapewniając elastyczność w wywoływaniu metod, gwarantując dostarczenie niezbędnych danych i upraszczając strukturę kodu.

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