在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
今天,我们将深入研究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
如果提供了可选参数,则会覆盖默认值。
请记住,在方法声明中,必须参数必须始终列在可选参数之前。
必填参数或命名参数与可选参数之间的区别非常重要,因为它会影响到如何调用方法。可选参数具有灵活性,当不需要特定参数时,可以跳过这些参数的输入。另一方面,必填参数可确保始终向函数或方法提供必要的数据,有助于防止运行时出错。
在使用默认参数定义方法时,有几条关键规则需要记住:
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
在静态 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# 中的命名参数有几个好处:
1.提高可读性:命名参数可使代码更易于阅读和理解。通过指定参数的名称,您可以清楚地知道每个参数代表什么。这对包含多个参数的方法尤其有益。
2.灵活的参数顺序使用命名参数,您可以按任何顺序提供参数,而不仅仅是参数在方法声明中出现的顺序。在某些情况下,这可以使代码更加灵活,并提高可读性。
3.易于使用可选参数:命名参数通常与可选参数一起使用。当一个方法有多个可选参数时,可以使用这些参数为某些可选参数提供值,而不为其他参数提供值。这样,你就不需要为每个可选参数提供值,只需要为那些你想改变默认值的参数提供值。
下面是另一个命名参数值类型的例子:
// 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 软件套件,其中包括 IronPDF, IronXL, IronOCR和 IronBarcode.这些功能强大的库专门用于帮助您扩展 C# 应用程序的功能。它们很容易与我们在文章中讨论的概念联系起来,包括默认参数、命名参数规范和方法重载。
IronPDF: 这是一个 C# 库,用于 将 HTML 转换为 PDF.在使用 IronPDF 时,了解默认参数和可选参数至关重要。IronPDF 中的许多方法都有可选参数,这些参数允许在不使方法签名过于复杂的情况下进行广泛的自定义。有关这方面的更多信息,请参阅 IronPDF HTML 转 PDF 教程 page.
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: 先进的光学字符识别功能 (光学字符识别) IronOCR 库可以在 C# 应用程序中读取图像和 PDF 中的文本和条形码。IronOCR 的方法可能带有可选参数,用于控制 OCR 过程的各个方面,如文本的语言、应用的纠错级别等。了解这些参数可以让您更好地控制 OCR 过程。
IronBarcode: 该库是在 .NET 应用程序中读取和生成条形码的多功能工具。在这里,了解默认参数也是至关重要的。例如,在生成条形码时,您可以使用可选参数来指定条形码的大小、格式或值。
总之,掌握 C# 中默认参数和可选参数的使用方法,可以大大提高编程效率和代码的通用性。这些概念是 C# 的基础。
说到这些库,请记住每个库的单独许可证都是从 $749 开始的,而且这些库还提供一个 免费试用.不过,Iron Software 提供一揽子交易:您只需支付两个单独许可证的价格,即可获得整个套件。