在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
今天,我們將深入 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
這裡,參數 name
是一個可選屬性。 字串 "Friend" 是預設值。 如果您呼叫 Greet()如果不傳遞參數,將使用「Friend」作為
name` 的值。
必需的參數是指在調用函數或方法時必須包含的參數。 它沒有預設值,因此必須始終提供一個參數。 編譯器檢查對函數或方法的調用,如果未提供所需的參數,則會拋出編譯時錯誤。
讓我們考慮一個例子:
//pass arguments in the same order
public void IntroduceYourself(string firstName, string lastName)
{
Console.WriteLine("Hello, my name is " + firstName + " " + lastName);
}
//pass arguments in the same order
public void IntroduceYourself(string firstName, string lastName)
{
Console.WriteLine("Hello, my name is " + firstName + " " + lastName);
}
'pass arguments in the same order
Public Sub IntroduceYourself(ByVal firstName As String, ByVal lastName As String)
Console.WriteLine("Hello, my name is " & firstName & " " & lastName)
End Sub
在此方法中,firstName
和 lastName
均為必需參數。 當你呼叫 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
另一方面,可選參數允許靈活性。 他們在方法定義中設置了預設值,當調用該方法而不傳遞該參數時使用該預設值。
例如,我們將修改 IntroduceYourself
方法,使 lastName
參數成為可選的:
//named arguments
public void IntroduceYourself(string firstName, string lastName = "Doe")
{
Console.WriteLine("Hello, my name is " + firstName + " " + lastName);
}
//named arguments
public void IntroduceYourself(string firstName, string lastName = "Doe")
{
Console.WriteLine("Hello, my name is " + firstName + " " + lastName);
}
'named arguments
Public Sub IntroduceYourself(ByVal firstName As String, Optional ByVal lastName As String = "Doe")
Console.WriteLine("Hello, my name is " & firstName & " " & lastName)
End Sub
現在,您可以只使用 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
當您提供可選參數時,它將覆蓋預設值。
請記住,在方法宣告中,必須先列出必填參數,再列出選填參數。
區分必需或命名參數與可選參數具有重要意義,因為這會影響你如何調用方法。 可選參數提供靈活性,讓您在不需要特定參數時略過輸入。 另一方面,必需的參數確保總是將必要的數據提供給函數或方法,有助於防止運行時錯誤。
在定義具有預設參數的方法時,需要記住幾個關鍵規則:
預設值必須是一個常數表達式。 您不能使用變數或方法調用。
所有可選參數必須在所有必需參數之後定義於參數列表的末尾。
當您呼叫具有可選參數的方法時,可以按照定義順序提供省略的可選參數,或者使用具名參數。
如果未提供可選參數值,將使用預設值。
考慮以下使用位置參數的程式碼片段:
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
在靜態的 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
我們可以只使用第一個參數調用這個方法:
ShowGreetings("Hi");
ShowGreetings("Hi");
ShowGreetings("Hi")
或者我們可以使用具名參數來提供 name
的值,同時省略 greeting
參數:
ShowGreetings(name: "John");
ShowGreetings(name: "John");
ShowGreetings(name:= "John")
C# 中的命名參數提供了幾個好處:
改進的可讀性
:命名參數可以讓您的程式碼更易於閱讀和理解。 通過指定參數的名稱,可以清楚地表示每個參數代表什麼。 這在具有多個參數的方法中特別有益。
彈性參數順序
:使用命名參數,您可以以任意順序提供參數,而不僅僅是按方法聲明中的參數順序提供。 這可以使您的程式碼更加靈活,並在某些情況下提高可讀性。
使用可选参数的便利性
:命名参数通常与可选参数一起使用。 當一個方法有幾個可選參數時,你可以利用這些參數為某些可選參數提供值,而不需要對其他參數提供值。 這樣一來,您不需要為每個可選參數提供值,只需對那些您想更改其預設值的參數提供即可。
這裡還有一個具名參數值類型的例子:
// 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)
在上述程式碼中,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);
}
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
在上述範例中,DisplayMessage
方法是重載的。 該方法的一個版本接受單個 string
參數,另一個版本則接受兩個 string
參數。
默認參數通常可以作為重載的替代方案使用。 通過在方法中為參數提供預設值,您可以允許調用者選擇是否提供該參數。 這可以使您的方法具備與方法重載相同的靈活性,但代碼更少。
以下是如何使用預設參數重寫上述範例,而不是進行重載:
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
現在,可以用一或兩個參數來呼叫 DisplayMessage
:
DisplayMessage("Hello");
DisplayMessage("Hello", "John");
DisplayMessage("Hello");
DisplayMessage("Hello", "John");
DisplayMessage("Hello")
DisplayMessage("Hello", "John")
在第一次調用中,name
參數使用其預設值 "Friend"。 在第二次調用中,取而代之地使用提供的參數 "John"。
請記住,預設參數的預設值必須是一個常數表達式,這意味著它不能是變量或方法調用。 這是因為該值需要在編譯時已知。
讓我們深入了解Iron Software套件,其包含IronPDF 庫的 PDF 解決方案, IronXL 用於 C# 的 Excel 操作, 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
IronXL:該函式庫允許您的C#應用程式讀取、寫入及操作各種格式的Excel檔案。 IronXL 中的方法可能有不同的參數,例如用於保存文件的格式,或在導入數據時是否包含標題。 您可能還會發現,命名和可選參數被廣泛用於指定儲存格範圍、格式選項等。
IronOCR:先進的光學字符識別(光學字符識別)可在您的C#應用程式中從圖像和PDF讀取文字和條碼的庫。 IronOCR的方法可能有可选参数,用于控制OCR过程的各个方面,例如文本的语言、应用的错误修正等级等等。 了解這些參數可以讓您更好地控制 OCR 過程。
IronBarcode:這個庫是一個多功能工具,用於在 .NET 應用程式中讀取和生成條碼。 在這裡,了解預設參數也是至關重要的。 例如,在生成條碼時,您可能有可選參數來指定條碼的大小、格式或值。
總結來說,精通在 C# 中使用預設和可選參數可以顯著提高您的編程效率和代碼的多樣性。 這些概念是 C# 的基礎。
說到這些庫,請記住每個庫的個人授權費用從 $749 開始,這些庫還提供一個Iron Software 產品的免費試用. 然而,Iron Software 提供一個套裝優惠:您可以僅用兩個單獨授權的價格獲得整個套件。