跳至页脚内容
.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是一个可选属性。 字符串 "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

在这个方法中,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
$vbLabelText   $csharpLabel

可选参数

另一方面,可选参数允许灵活性。 它们在方法定义中设置了默认值,当调用方法时未提供该参数时使用。

例如,让我们修改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

现在,您可以仅用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

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

或者我们可以使用命名参数为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

在上面的代码中,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方法是重载的。 该方法的一个版本接受一个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);
}
$vbLabelText   $csharpLabel

现在,DisplayMessage可以用一个或两个参数调用:

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

在第一次调用中,name参数使用其默认值"Friend"。 在第二次调用中,使用提供的参数 "John"。

请记住,默认参数的默认值必须是常量表达式,这意味着它不能是变量或方法调用。 这是因为需要在编译时知道该值。

Iron Software Suite

让我们深入了解 Iron Software 套件,其中包括用于 PDF 解决方案的 IronPDF 库,用于 C# Excel 操作的 IronXL,用于高级文本识别的 IronOCR,以及用于条形码生成的 IronBarcode。 这些强大的库专为帮助您扩展 C# 应用程序的能力而设计。 它们可以轻松地与我们在文章中讨论的概念相关联,包括默认参数、命名参数规范和方法重载。

IronPDF: 这是一个 C# 库,用于 将 HTML 转换为 PDF 与 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# 中使用默认参数有何不同?

方法重载涉及创建多个具有相同名称但不同参数的方法,而默认参数通过为省略的参数提供备用值来允许单个方法处理多种情况。

使用 C# 中的默认参数时应遵循哪些规则?

关键规则包括确保默认值是常量表达式,将可选参数放在必需参数之后,以及使用命名参数指定省略的参数。

默认参数如何优化 IronPDF 库的使用?

在 IronPDF 中,默认参数可以通过允许开发人员在不指定每个参数的情况下调整 HTML 内容或文件路径等设置来简化 PDF 生成,从而有效地定制输出。

命名参数在提高代码可读性方面起什么作用?

命名参数允许按名称而不是位置指定参数,使代码更加可读,并减少与参数顺序相关的错误。

掌握默认参数对开发人员为何至关重要?

掌握默认参数是至关重要的,因为它通过在方法调用中提供灵活性来提高编程效率,确保提供必要的数据并简化代码结构。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。

Jacob 拥有曼彻斯特大学土木工程一级荣誉工程学士学位(BEng)(1998-2001 年)。他的旗舰产品 IronPDF 和 Iron Suite for .NET 库在全球的 NuGet 安装量已超过 3000 万次,其基础代码继续为全球使用的开发人员工具提供动力。Jacob 拥有 25 年的商业经验和 41 年的编码专业知识,他一直专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。

Iron Support Team

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