在生产环境中测试,无水印。
随时随地满足您的需求。
获得30天的全功能产品。
几分钟内就能启动并运行。
在您的产品试用期间,全面访问我们的支持工程团队。
今天,我们将深入 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
在静态 void 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套件,其中包括用于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");
}
}
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:一款先进的光学字符识别(OCR)库,可以在您的C#应用程序中从图像和PDF读取文本和条形码。 IronOCR 的方法可能有可选参数,用于控制 OCR 过程的各个方面,如文本的语言、应用的纠错级别等。 了解这些参数可以让您更好地控制 OCR 流程。
IronBarcode:这个库是一个多功能工具,用于在.NET应用程序中读取和生成条形码。 在这里,理解默认参数也至关重要。 例如,在生成条形码时,您可能会有可选参数来指定条形码的大小、格式或值。
总之,掌握 C# 中默认参数和可选参数的使用方法可以大大提高您的编程效率和代码的通用性。 这些概念是 C# 的基础。
说到这些库,请记住每个库的单独许可证起价为$749,而这些库也提供 Iron Software 产品的免费试用。 不过,Iron Software 提供一揽子优惠:您只需支付两个单独许可证的价格,即可获得整个套件。