跳過到頁腳內容
.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);
}
$vbLabelText   $csharpLabel

這裡,參數 name 是一個可選屬性。 字串"朋友"是預設值。 如果你呼叫 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);
}
$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
$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);
}
$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
$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);
}
$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);
}
$vbLabelText   $csharpLabel

我們只需傳入第一個參數即可呼叫此方法:

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

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

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);
$vbLabelText   $csharpLabel

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

預設參數和方法重載

什麼是方法重載?

在 C# 中,方法重載或函數重載是一項功能,它允許您定義多個名稱相同但參數不同的方法。 這樣一來,您可以使用相同的方法名稱執行不同的操作,從而使您的程式碼更加直觀易用。

請看以下重載方法的程式碼範例:

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);
}
$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);
}
$vbLabelText   $csharpLabel

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

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

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

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

Iron Software套件

讓我們深入了解Iron Software套件,其中包括用於 PDF 解決方案的IronPDF庫用於 C# Excel 操作的IronXL用於高級文字識別的IronOCR以及用於條碼生成的IronBarcode 。 這些強大的程式庫是專門為幫助您擴展 C# 應用程式的功能而設計的。 它們很容易與我們在文章中討論的概念連結起來,包括預設參數、命名參數規格和方法重載。

IronPDF:這是一個用於將 HTML 轉換為 PDF 的 C# 庫,它使用IronPDF。 了解預設參數和可選參數對於使用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");
    }
}
$vbLabelText   $csharpLabel

IronXL:該程式庫允許您的 C# 應用程式讀取、寫入和操作各種格式的 Excel 檔案。 IronXL中的方法可能具有不同的參數,例如檔案儲存格式,或匯入資料時是否包含標頭。 您可能還會發現,命名參數和可選參數被廣泛用於指定單元格範圍、格式選項等。
IronOCR:一個高級光學字元辨識 (OCR) 庫,可在您的 C# 應用程式中讀取圖像和 PDF 中的文字和條碼。 IronOCR的方法可能具有用於控制 OCR 流程各個方面的可選參數,例如文字語言、要應用的錯誤修正等級等等。 了解這些參數可以讓你更能控制OCR流程。
IronBarcode:該程式庫是一個功能強大的工具,用於在.NET應用程式中讀取和產生條碼。 同樣,了解預設參數至關重要。 例如,在產生條碼時,您可以設定選用參數來指定條碼的大小、格式或值。

結論

總之,掌握 C# 中預設參數和可選參數的使用方法可以顯著提高你的程式設計效率和程式碼的通用性。 這些概念是 C# 的基礎。

說到這些庫,請記住每個庫的單獨許可證從 $799 開始,並且這些庫還提供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技術的創新,同時指導下一代技術領導者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me