Ir para o conteúdo do rodapé
AJUDA DO .NET

Parâmetros padrão em C# (Como funciona para desenvolvedores)

Hoje, vamos mergulhar no mundo do C# e aprender sobre um recurso poderoso: os parâmetros padrão. Vamos explicar de uma forma fácil de entender, focando no conceito de valor padrão de argumento e argumentos opcionais em C#.

O que são parâmetros padrão?

Em C#, os parâmetros padrão , também conhecidos como parâmetros de argumento opcionais, permitem atribuir um valor a argumentos fixos na definição de um método. Se nenhum argumento para esse parâmetro for fornecido quando a função for chamada, será utilizado o valor padrão.

Um valor de parâmetro padrão é definido na definição do método, conforme mostrado no trecho de código abaixo:

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

Aqui, o parâmetro name é um atributo opcional. A string "Friend" é o valor padrão. Se você chamar Greet() sem passar um argumento, "Friend" será usado como o valor para name.

Parâmetros obrigatórios e parâmetros opcionais

Parâmetros obrigatórios

Um parâmetro obrigatório é um parâmetro que deve ser incluído quando a função ou o método é chamado. Não possui um valor padrão, portanto, um argumento deve sempre ser fornecido. O compilador verifica a chamada da função ou método e, se o parâmetro necessário não for fornecido, gera um erro de compilação.

Vejamos um exemplo:

// 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);
}
' Method with required parameters
Public Sub IntroduceYourself(ByVal firstName As String, ByVal lastName As String)
	Console.WriteLine("Hello, my name is " & firstName & " " & lastName)
End Sub
$vbLabelText   $csharpLabel

Neste método, firstName e lastName são ambos parâmetros obrigatórios. Ao chamar IntroduceYourself, você deve fornecer valores para ambos os parâmetros. Se você omitir argumentos, ocorrerá um erro de compilação.

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

Parâmetros opcionais

Por outro lado, os parâmetros opcionais permitem flexibilidade. Eles possuem um valor padrão definido dentro da definição do método, que é usado quando o método é chamado sem esse parâmetro.

Por exemplo, vamos modificar o método IntroduceYourself para tornar o parâmetro lastName opcional:

// 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);
}
' Method with an optional parameter
Public Sub IntroduceYourself(ByVal firstName As String, Optional ByVal lastName As String = "Doe")
	Console.WriteLine("Hello, my name is " & firstName & " " & lastName)
End Sub
$vbLabelText   $csharpLabel

Agora, você pode chamar IntroduceYourself apenas com o parâmetro firstName. Se você fizer isso, lastName assumirá o valor padrão "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
$vbLabelText   $csharpLabel

Ao fornecer os argumentos opcionais, eles substituem o valor padrão.

Lembre-se de que, na declaração do método, os parâmetros obrigatórios devem sempre ser listados antes dos parâmetros opcionais.

Entendendo a diferença

A distinção entre parâmetros obrigatórios e opcionais é importante, pois afeta a forma como você pode chamar um método. Os parâmetros opcionais oferecem flexibilidade, permitindo que você ignore a entrada de dados para parâmetros específicos quando eles não forem necessários. Por outro lado, os parâmetros obrigatórios garantem que os dados necessários sejam sempre fornecidos à função ou ao método, ajudando a evitar erros em tempo de execução.

Regras para usar parâmetros padrão

Ao definir um método com parâmetros padrão, há algumas regras importantes a serem lembradas:

  1. O valor padrão deve ser uma expressão constante. Não é possível usar variáveis ​​ou chamadas de método.
  2. Todos os parâmetros opcionais devem ser definidos no final da lista de parâmetros, após quaisquer parâmetros obrigatórios.
  3. Ao chamar um método com parâmetros opcionais, você pode fornecer argumentos omitidos para os parâmetros opcionais na ordem em que são definidos, ou pode usar argumentos nomeados.
  4. O valor padrão será usado se nenhum valor de argumento opcional for fornecido.

Considere o seguinte trecho de código para argumentos opcionais:

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

No método Main, chamamos ShowMessage duas vezes. Na primeira vez, passamos apenas um argumento, portanto, o parâmetro name usa seu valor padrão "Friend". Na segunda vez, passamos dois argumentos, então "John" é usado em vez do valor padrão.

Parâmetros nomeados e opcionais

O C# também suporta parâmetros nomeados e opcionais. Os parâmetros nomeados permitem especificar um valor para um parâmetro pelo nome, em vez de pela posição. Isso pode ser útil quando um método possui vários parâmetros opcionais e você deseja fornecer um valor para um deles, mas não para os outros.

No exemplo a seguir, ShowGreetings possui dois parâmetros opcionais:

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

Podemos chamar esse método apenas com o primeiro parâmetro:

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

Ou podemos usar argumentos nomeados para fornecer um valor para o argumento name, omitindo o argumento greeting:

ShowGreetings(name: "John");
ShowGreetings(name: "John");
ShowGreetings(name:= "John")
$vbLabelText   $csharpLabel

Qual a vantagem de usar parâmetros nomeados?

Os parâmetros nomeados em C# oferecem diversas vantagens:

  1. Improved Readability: Parâmetros nomeados podem tornar seu código mais fácil de ler e entender. Ao especificar o nome do parâmetro, você deixa claro o que cada argumento representa. Isso pode ser especialmente benéfico em métodos com múltiplos parâmetros.
  2. Flexible Argument Order: Com parâmetros nomeados, você pode fornecer argumentos em qualquer ordem, não apenas na ordem em que os parâmetros aparecem na declaração do método. Isso pode tornar seu código mais flexível e melhorar a legibilidade em alguns casos.
  3. Ease with Optional Parameters: Parâmetros nomeados são frequentemente usados ​​com parâmetros opcionais. Quando um método possui vários parâmetros opcionais, você pode usar parâmetros nomeados para fornecer valores para alguns parâmetros opcionais, mas não para outros. Dessa forma, você não precisa fornecer um valor para cada parâmetro opcional, apenas para aqueles que deseja alterar em relação aos seus valores padrão.

Aqui está outro exemplo de uso de parâmetros nomeados:

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

No código acima, email é um parâmetro opcional que omitimos, e optamos por definir subscribeToNewsletter como true, mesmo sendo o último parâmetro da lista. O uso de um parâmetro nomeado deixa claro o que cada argumento representa e nos permite especificar apenas os argumentos que desejamos fornecer.

Parâmetros padrão e sobrecarga de métodos

O que é sobrecarga de métodos?

Em C#, a sobrecarga de métodos, ou sobrecarga de funções, é um recurso que permite definir vários métodos com o mesmo nome, mas com conjuntos diferentes de parâmetros. Isso permite que você execute diferentes operações usando o mesmo nome de método, tornando seu código mais intuitivo e fácil de usar.

Considere o seguinte exemplo de código com métodos sobrecarregados:

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

No exemplo acima, o método DisplayMessage está sobrecarregado. Uma versão do método aceita um único parâmetro string, e a outra aceita dois parâmetros string.

Utilizando parâmetros padrão em vez de sobrecarregá-los.

Os parâmetros padrão podem frequentemente ser usados ​​como uma alternativa à sobrecarga. Ao fornecer um valor padrão para um parâmetro em seu método, você permite que o chamador escolha se deseja fornecer esse parâmetro. Isso pode dar ao seu método a mesma flexibilidade que a sobrecarga de métodos, mas com menos código.

Eis como você poderia reescrever o exemplo acima usando um parâmetro padrão em vez de sobrecarregá-lo:

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

Agora, DisplayMessage pode ser chamado com um ou dois argumentos:

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

Na primeira chamada, o parâmetro name usa seu valor padrão "Friend". Na segunda chamada, o argumento fornecido "John" é usado em vez disso.

Lembre-se: o valor padrão para um parâmetro padrão deve ser uma expressão constante, o que significa que não pode ser uma variável ou uma chamada de método. Isso ocorre porque o valor precisa ser conhecido em tempo de compilação.

Pacote de Iron Software

Vamos explorar o pacote Iron Software , que inclui a biblioteca IronPDF para soluções em PDF , o IronXL para operações em C# com o Excel , o IronOCR para reconhecimento avançado de texto e o IronBarcode para geração de códigos de barras . Essas poderosas bibliotecas foram projetadas especificamente para ajudar você a expandir os recursos de seus aplicativos C#. Eles podem ser facilmente relacionados aos conceitos que discutimos no artigo, incluindo parâmetros padrão, especificações de argumentos nomeados e sobrecarga de métodos.

IronPDF: Esta é uma biblioteca C# para converter HTML em PDF com o IronPDF . Compreender os parâmetros padrão e opcionais pode ser crucial ao usar o IronPDF. Muitos dos métodos em IronPDF possuem parâmetros opcionais, o que permite uma ampla personalização sem complicar excessivamente as assinaturas dos métodos. Você pode encontrar mais informações sobre isso no tutorial de conversão de HTML para PDF do IronPDF .

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

IronXL: Esta biblioteca permite que sua aplicação C# leia, grave e manipule arquivos Excel em diversos formatos. Os métodos no IronXL podem ter parâmetros diferentes para coisas como o formato em que um arquivo será salvo ou se os cabeçalhos devem ser incluídos ao importar dados. Você também poderá constatar que parâmetros nomeados e opcionais são amplamente utilizados para especificar intervalos de células, opções de formatação e muito mais.
IronOCR: Uma biblioteca avançada de Reconhecimento Óptico de Caracteres (OCR) capaz de ler textos e códigos de barras em imagens e PDFs em suas aplicações C#. Os métodos do IronOCR podem ter parâmetros opcionais para controlar aspectos do processo de OCR, como o idioma do texto, o nível de correção de erros a ser aplicado e assim por diante. Compreender esses parâmetros pode lhe dar um melhor controle sobre o processo de OCR.
IronBarcode: Esta biblioteca é uma ferramenta versátil para leitura e geração de códigos de barras em aplicações .NET . Aqui também, compreender os parâmetros padrão é crucial. Ao gerar um código de barras, por exemplo, você pode ter parâmetros opcionais para especificar o tamanho, o formato ou o valor do código de barras.

Conclusão

Em conclusão, dominar o uso de parâmetros padrão e opcionais em C# pode melhorar significativamente a eficiência da sua programação e a versatilidade do seu código. Esses conceitos são fundamentais para o C#.

Falando dessas bibliotecas, lembre-se de que as licenças individuais para cada uma começam em $799, e essas bibliotecas também oferecem um teste gratuito dos produtos da Iron Software . No entanto, a Iron Software oferece um pacote promocional: você pode adquirir o pacote completo pelo preço de apenas duas licenças individuais.

Perguntas frequentes

Como os parâmetros padrão melhoram a eficiência do código em C#?

Em C#, os parâmetros padrão permitem que os desenvolvedores atribuam valores predefinidos aos argumentos dos métodos, reduzindo a necessidade de múltiplas sobrecargas de métodos e simplificando a manutenção do código.

É possível usar parâmetros padrão com parâmetros nomeados em C#?

Sim, em C#, os parâmetros padrão podem ser combinados com parâmetros nomeados, permitindo que os desenvolvedores especifiquem apenas os argumentos necessários por nome, melhorando a legibilidade e a flexibilidade do código.

Quais são os benefícios de usar parâmetros opcionais em C#?

Em C#, os parâmetros opcionais oferecem flexibilidade, permitindo que as chamadas de método omitam certos argumentos, que por padrão assumem valores predefinidos, simplificando a chamada do método e reduzindo a redundância de código.

Em que difere a sobrecarga de métodos do uso de parâmetros padrão em C#?

A sobrecarga de métodos envolve a criação de múltiplos métodos com o mesmo nome, mas com parâmetros diferentes, enquanto os parâmetros padrão permitem que um único método lide com múltiplos cenários, fornecendo valores alternativos para argumentos omitidos.

Quais regras devem ser seguidas ao usar parâmetros padrão em C#?

As regras principais incluem garantir que os valores padrão sejam expressões constantes, colocar os parâmetros opcionais após os obrigatórios e usar argumentos nomeados para especificar parâmetros omitidos.

Como os parâmetros padrão podem otimizar o uso da biblioteca IronPDF?

No IronPDF, os parâmetros padrão podem agilizar a geração de PDFs, permitindo que os desenvolvedores ajustem configurações como conteúdo HTML ou caminhos de arquivos sem precisar especificar cada argumento, personalizando assim a saída de forma eficiente.

Qual o papel dos parâmetros nomeados na melhoria da legibilidade do código?

Os parâmetros nomeados permitem que os argumentos sejam especificados por nome em vez de posição, tornando o código mais legível e reduzindo erros relacionados à ordem dos argumentos.

Por que dominar os parâmetros padrão é fundamental para os desenvolvedores?

Dominar os parâmetros padrão é crucial, pois aumenta a eficiência da programação, proporcionando flexibilidade nas chamadas de método, garantindo que os dados necessários sejam fornecidos e simplificando a estrutura do código.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim