跳過到頁腳內容
.NET幫助

C# 預設參數(開發者的工作原理)

今天,我們將深入 C# 的世界,瞭解一個強大的功能 - 預設參數。 我們將以通俗易懂的方式進行分解,重點介紹 C# 中預設參數值和可選參數的概念。

什麼是預設參數?

在 C# 中,預設參數(也稱為可選參數參數)允許您在方法定義中為固定參數指定一個值。 如果在呼叫函式時沒有提供該參數的參數,則會使用預設值。

如以下程式碼片段所示,在方法定義中設定了預設參數值:

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

這裡,參數 name 是一個可選屬性。 字串"Friend"為預設值。 如果你呼叫 Greet() 而不傳遞參數,則"Friend"將用作 name 的值。

必要參數和可選參數

必要參數

必填參數是指在呼叫函數或方法時必須包含的參數。 它沒有預設值,所以必須隨時提供參數。 編譯器會檢查函數或方法的呼叫,如果沒有提供所需的參數,就會在編譯時產生錯誤。

讓我們考慮一個例子:

// 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

在本方法中,firstNamelastName 都是必需參數。 當呼叫 IntroduceYourself 時,必須為兩個參數提供值。 如果您省略了參數,就會出現編譯時錯誤。

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

選用參數

另一方面,可選參數允許靈活性。 它們在方法定義中設定了預設值,在沒有該參數的情況下呼叫方法時會使用該預設值。

例如,讓我們修改 IntroduceYourself 方法,使 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 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

現在,您可以只使用 firstName 參數來呼叫 IntroduceYourself。 如果這樣做,lastName 將預設為"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

當您提供可選參數時,它會覆寫預設值。

請記住,在方法聲明中,必填參數必須永遠列在可選參數之前。

瞭解差異

必備參數與可選參數之間的區別非常重要,因為這會影響您如何呼叫方法。 可選參數提供彈性,讓您在不需要特定參數時跳過其輸入。 另一方面,所需的參數可確保總是提供必要的資料給函數或方法,有助於防止執行時出錯。

使用預設參數的規則

在定義具有預設參數的方法時,有幾個關鍵規則需要記住:

1.預設值必須是常數表達式。 不能使用變數或方法呼叫。 2.所有可選參數必須定義在參數清單的最後,任何必填參數之後。 3.當您呼叫具有可選參數的方法時,您可以依照定義的順序為可選參數提供省略的參數,也可以使用已命名的參數。 4.如果未提供可選的參數值,則會使用預設值。

請考慮以下可選參數的程式碼片段:

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

Main 方法中,我們呼叫了 ShowMessage 兩次。第一次只傳遞一個參數,因此 name 參數使用其預設值"Friend"。 我們第二次傳入兩個參數,因此使用"John"取代預設值。

命名和可選參數

C# 也支援命名和可選參數。 命名參數允許您透過名稱而非位置來指定參數值。 當一個方法有多個可選參數,而您想要提供其中一個參數的值,但不提供其他參數的值時,這會很有幫助。

在下列範例中,ShowGreetings 有兩個可選參數:

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

我們可以只使用第一個參數來呼叫此方法:

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

或者我們可以使用命名參數為 name 提供值,同時省略 greeting 參數:

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

使用命名參數有什麼好處?

C# 中的命名參數提供了幾種好處:

  1. Improved Readability: 命名參數可以讓你的程式碼更容易閱讀和理解。 透過指定參數的名稱,您可以清楚說明每個參數所代表的意義。 這對多參數的方法尤其有利。
  2. Flexible Argument Order: 使用命名參數,您可以任意順序提供參數,而不僅僅是參數在方法宣告中出現的順序。 這可以讓您的程式碼更有彈性,並在某些情況下提高可讀性。
  3. Ease with Optional Parameters: 命名參數通常與可選參數一起使用。 當一個方法有多個可選參數時,您可以使用命名參數為某些可選參數提供值,而不為其他參數提供值。 這樣一來,您就不需要為每個可選參數提供值,只需要提供那些您想要從預設值變更的參數。

以下是另一個使用命名參數的範例:

// 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

在上面的程式碼中,email 是一個可選參數,我們省略了它。即使 subscribeToNewsletter 是清單中的最後一個參數,我們也將其設為 true。使用命名參數可以清楚地表明每個參數的含義,並允許我們只指定需要提供的參數。

預設參數與方法重載

什麼是方法重載?

在 C# 中,方法重載 (method overloading) 或函數重載 (function overload) 是一種功能,可讓您定義多個名稱相同但參數不同的方法。 這可讓您使用相同的方法名稱執行不同的作業,讓您的程式碼更直覺、更容易使用。

考慮以下重載方法的程式碼範例:

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

在上面的範例中,DisplayMessage 方法被重載了。 方法的一個版本接受一個參數,另一個版本接受兩個參數。

使用預設參數而非重載

預設參數通常可以用來替代重載。 透過在方法中為參數提供預設值,您可以讓呼叫者選擇是否提供該參數。 這可以讓您的方法具有與方法重載相同的靈活性,但只需較少的程式碼。

以下是使用預設參數取代重載重寫上述範例的方法:

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

現在,DisplayMessage 可以接受一個或兩個參數:

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

在第一次呼叫中,name 參數使用其預設值"Friend"。 在第二次呼叫中,使用提供的參數"John"來取代。

請記住,預設參數的預設值必須是常數表達式,也就是不能是變數或方法呼叫。 這是因為需要在編譯時就知道其價值。

Iron 軟體套件

讓我們深入瞭解 Iron Software 套件,其中包括適用於 PDF 解決方案的 IronPDF 函式庫、適用於 C# Excel 操作的 IronXL、適用於進階文字辨識的 IronOCR,以及適用於條碼產生的 IronBarcode。 這些功能強大的函式庫是專門設計來幫助您擴充 C# 應用程式的功能。 它們很容易與我們在文章中討論的概念相關聯,包括預設參數、命名的參數規格和方法重載。

IronPDF:這是一個 C# 函式庫,用於使用 IronPDF 將 HTML 轉換為 PDF。 在使用 IronPDF 時,理解預設和可選參數可能非常關鍵。 IronPDF 中的許多方法都會有可選參數,可在不使方法簽章過度複雜的情況下進行廣泛的客製化。 IronPDF HTML轉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

IronXL:這個函式庫可讓您的 C# 應用程式讀取、寫入和處理各種格式的 Excel 檔案。 IronXL 中的方法可能有不同的參數,例如儲存檔案的格式,或匯入資料時是否包含標頭。 您可能還會發現,命名和可選參數被廣泛用於指定儲存格範圍、格式化選項等。
IronOCR:先進的光學字元識別 (OCR) 函式庫,可在您的 C# 應用程式中讀取影像和 PDF 中的文字和 BarCode。 IronOCR 的方法可能具有可選參數,用於控制 OCR 過程的各個方面,例如文字的語言、應用的糾錯程度等。 瞭解這些參數可以讓您更好地控制 OCR 流程。
IronBarcode:這個函式庫是在 .NET 應用程式中讀取和產生條碼的多功能工具。 在此,理解預設參數也是至關重要的。 例如,在產生條碼時,您可能會有可選參數來指定條碼的大小、格式或數值。

結論

總而言之,掌握 C# 中預設參數和可選參數的使用,可以大幅提升您的程式設計效率和程式碼的多樣性。 這些概念是 C# 的基本概念。

說到這些庫,請記住每個庫的單獨許可證都從 $999 開始,並且這些庫還提供Iron Software 產品的免費試用。 不過,Iron Software 提供套裝交易:您只需花費兩個個別授權的價格,即可取得整個套件。

常見問題解答

預設參數如何在 C# 中提高程式碼效率?

C# 中的預設參數允許開發人員為方法參數分配預定義的值,減少需要多重方法重載的必要性,並簡化程式碼維護。

預設參數可以與命名參數一起使用嗎?

可以,C# 中可以將預設參數與命名參數結合使用,允許開發人員僅通過名稱指定必要的參數,提高程式碼的可讀性和靈活性。

使用可選參數在 C# 中有什麼好處?

C# 中的可選參數提供靈活性,允許方法呼叫省略某些參數,這些參數將默認為預定義的值,簡化方法呼叫並減少程式碼冗余。

方法重載與使用預設參數在 C# 中有何不同?

方法重載涉及創建多個具有相同名稱但不同參數的方法,而預設參數允許單一方法通過為省略的參數提供替代值來處理多個場景。

使用預設參數時應遵循哪些規則?

關鍵規則包括確保預設值為常量表達式,將可選參數放在必需參數之後,並使用命名參數指定省略的參數。

預設參數如何優化 IronPDF 庫的使用?

在 IronPDF 中,預設參數可以通過允許開發人員調整如 HTML 內容或文件路徑等設置來簡化 PDF 的生成,而無需指定每一個參數,從而高效地自定義輸出。

命名參數在提高程式碼可讀性方面起什麼作用?

命名參數允許通過名稱而非位置指定參數,這使得程式碼更易讀,並減少因參數順序出錯的機會。

為何掌握預設參數對開發人員至關重要?

掌握預設參數至關重要,因為它提高了編程效率,通過提供方法呼叫中的靈活性確保必要資料供應,並簡化程式碼結構。

Jacob Mellor, Team Iron 首席技術官
首席技術官

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我