.NET ヘルプ

C# のデフォルトパラメータ (開発者向けの動作方法)

更新済み 8月 29, 2023
共有:

今日は、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
VB   C#

ここでは、パラメーター name はオプションの属性です。 文字列「Friend」はデフォルト値です。 以下の内容を日本語に翻訳します:

If you call Greet, it will display a welcome message to the user.

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
VB   C#

このメソッドでは、firstNamelastName の両方が必須パラメーターです。 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
VB   C#

オプションパラメーター

一方で、オプションパラメーターは柔軟性を提供します。 メソッド定義内にデフォルト値が設定されており、メソッドがそのパラメーターなしで呼び出された場合に使用されます。

例えば、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
VB   C#

今、IntroduceYourselffirstNameパラメーターだけで呼び出すことができます。 その場合、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
VB   C#

オプションの引数を指定すると、デフォルト値が上書きされます。

メソッド宣言では、必須パラメーターは常にオプションパラメーターの前に記載する必要があることを忘れないでください。

違いの理解

必須または名前付きパラメーターとオプションパラメーターの区別は重要です。これは、メソッドの呼び出し方法に影響を与えるからです。 オプションパラメーターは柔軟性を提供し、必要ない特定のパラメーターの入力を省略することができます。 一方、必須パラメータは、関数やメソッドに常に必要なデータが提供されることを保証し、実行時エラーを防ぐのに役立ちます。

デフォルトパラメータの使用規則

デフォルトパラメータを使用してメソッドを定義する際には、いくつかの重要なルールを覚えておく必要があります:

  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
VB   C#

静的な Main メソッド内で、ShowMessage を2回呼び出します。最初の呼び出しでは引数を1つだけ渡すので、name パラメータはデフォルト値の「Friend」を使用します。 2回目に2つの引数を渡すため、「John」がデフォルト値の代わりに使用されます。

名前付きおよび省略可能なパラメーター

C#は名前付きおよびオプションのパラメーターもサポートしています。 名前付きパラメーターを使用すると、位置ではなく名前でパラメーターの値を指定できます。 これは、メソッドに複数のオプションパラメータがあり、1つの値を提供したいが他の値を提供したくない場合に役立ちます。

以下の例では、ShowGreetings には2つのオプションのパラメーターがあります:

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
VB   C#

このメソッドは最初のパラメータだけで呼び出すことができます:

ShowGreetings("Hi");
ShowGreetings("Hi");
ShowGreetings("Hi")
VB   C#

または、名前付き引数を使用してgreeting引数を省略しながらnameに値を提供することもできます:

ShowGreetings(name: "John");
ShowGreetings(name: "John");
ShowGreetings(name:= "John")
VB   C#

名前付きパラメーターを使用する利点は何ですか?

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)
VB   C#

上記のコードでは、email は省略したオプションのパラメーターです。そして、リストの最後のパラメーターにもかかわらず、subscribeToNewslettertrue に設定することを選択しました。名前付きパラメーターを使用することで、各引数が何を表しているかを明確にし、指定したい引数だけを提供することができます。

デフォルトパラメーターとメソッドオーバーロード

メソッドのオーバーロードとは何ですか?

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
VB   C#

上記の例では、DisplayMessage メソッドがオーバーロードされています。 メソッドの1つは1つのstringパラメータを取り、もう1つは2つの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
VB   C#

さて、DisplayMessage は1つまたは2つの引数を使って呼び出すことができます:

DisplayMessage("Hello");
DisplayMessage("Hello", "John");
DisplayMessage("Hello");
DisplayMessage("Hello", "John");
DisplayMessage("Hello")
DisplayMessage("Hello", "John")
VB   C#

最初の呼び出しでは、name パラメーターはデフォルト値の「Friend」を使用しています。 2回目の呼び出しでは、代わりに引数として渡された「John」が使用されます。

覚えておいてください、デフォルトパラメータのデフォルト値は定数式でなければならず、変数やメソッド呼び出しであってはなりません。 これは、値がコンパイル時に知られている必要があるためです。

Iron Software Suite(アイアン ソフトウェア スイート)

では、Iron Softwareスイートについて詳しく見ていきましょう。含まれている製品は IronPDF, IronXL, IronOCR、および IronBarcode. これらの強力なライブラリは、C#アプリケーションの機能を拡張するために特別に設計されています。 それらは、記事で議論した概念、デフォルトパラメータ、名前付き引数指定、およびメソッドのオーバーロードに簡単に関連付けることができます。

IronPDF:これはC#ライブラリです 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
VB   C#

IronXL: このライブラリを使用すると、C#アプリケーションはさまざまな形式のExcelファイルを読み書きし、操作することができます。 IronXLのメソッドには、ファイルを保存する形式やデータをインポートする際にヘッダーを含めるかどうかなど、異なるパラメーターがある場合があります。 名前付きパラメーターとオプションパラメーターも、セル範囲、フォーマットオプションなどを指定するために広範に使用されていることがわかるでしょう。

IronOCR: 高度な光学文字認識 (OCR (光学式文字認識)) C#アプリケーションで画像やPDFからテキストやバーコードを読み取ることができるライブラリ。 IronOCRのメソッドには、テキストの言語、適用するエラー補正のレベルなど、OCRプロセスの側面を制御するためのオプションパラメータが含まれている場合があります。 これらのパラメーターを理解することで、OCRプロセスをより良く制御することができます。

IronBarcode: このライブラリは、.NETアプリケーションでバーコードを読み取りおよび生成するための多用途ツールです。 ここでも、デフォルトパラメータを理解することが重要です。 バーコードを生成する際に、例えば、サイズ、フォーマット、またはバーコードの値を指定するためのオプションパラメータを設定できる場合があります。

結論

結論として、C#におけるデフォルトパラメータとオプションパラメータの活用を熟達させることで、プログラミングの効率性とコードの多様性を大幅に向上させることができます。 これらの概念はC#の基本です。

これらのライブラリについて言えば、各ライセンスの開始価格は $749 からであり、これらのライブラリはまた次のものも提供しています 無料試用. しかし、Iron Softwareはパッケージ取引を提供しています:個々のライセンス2つ分の価格で、全てのスイートを取得することができます。

< 以前
C#(および開発者に対する動作の仕組み)
次へ >
C# Dictionary TryGetValue(開発者のための動作方法)

準備はできましたか? バージョン: 2024.9 新発売

無料のNuGetダウンロード 総ダウンロード数: 10,659,073 View Licenses >