フッターコンテンツにスキップ
.NETヘルプ

C# Ref(開発者向けの動作方法)

C# では、ref キーワード は、メソッドが渡された参照型変数のパラメーター値を変更できる強力な機能です。 ref を使用する方法を理解することは、アプリケーション内でデータを管理および操作する能力を向上させることができます。

この記事では、ref キーワードの基本、その適用、およびさまざまなデータ型で使用する際の違いを案内します。また、PDFライブラリである IronPDF library for .NET についても学びます。

ref パラメーターを理解する

ref パラメーターは、メソッドに渡された変数の参照として動作するメソッド パラメーターです。 標準の値パラメーターとは異なり、変数のコピーのみが渡されるのではなく、ref パラメーターを使用すると、呼び出されたメソッドが元の変数の値を変更できます。 この動作は、メソッドに渡される変数の状態を更新する必要がある場合に重要です。

次の例を考え、ref の基本的な使用法を示しています。参照型変数 がメソッド呼び出し全体で同じオブジェクト内に パラメーター値 を保持する方法に焦点を当てています。

class Program
{
    static void Main()
    {
        int number = 100;
        ModifyNumber(ref number);
        Console.WriteLine(number); // Output: 200
    }

    // Method that modifies the original number through 'ref'
    static void ModifyNumber(ref int number)
    {
        number = 200; // Modifies the original value
    }
}
class Program
{
    static void Main()
    {
        int number = 100;
        ModifyNumber(ref number);
        Console.WriteLine(number); // Output: 200
    }

    // Method that modifies the original number through 'ref'
    static void ModifyNumber(ref int number)
    {
        number = 200; // Modifies the original value
    }
}
Friend Class Program
	Shared Sub Main()
		Dim number As Integer = 100
		ModifyNumber(number)
		Console.WriteLine(number) ' Output: 200
	End Sub

	' Method that modifies the original number through 'ref'
	Private Shared Sub ModifyNumber(ByRef number As Integer)
		number = 200 ' Modifies the original value
	End Sub
End Class
$vbLabelText   $csharpLabel

この例では、Main メソッドで整数 number を宣言し、100 を初期化します。その後、ref パラメーターとして number を渡して ModifyNumber を呼び出します。 ModifyNumber の内部で、number の値が 200 に変更されます。number は参照で渡されるため、その変更は Main メソッド内の元の値に反映され、200 がコンソールに出力されます。

ref パラメーターの動作方法

ref キーワードでメソッド パラメーターを宣言する場合、そのパラメーターがコピーではなく元の変数を参照することをコンパイラに伝えます。 これは、実際の値ではなく、変数のメモリ アドレスを渡すことで実現されます。 呼び出されたメソッドと呼び出しメソッドの両方が同じメモリ ロケーションにアクセスするため、パラメーターに対する変更は元の変数に直接適用されます。

ref を理解する鍵は、それを値型と参照型の両方で使用できることを認識することです。値型には整数や構造体などの単純なデータ型が含まれ、参照型にはオブジェクトや配列が含まれます。 ただし、参照型変数は元々メモリ アドレスを保持しているにもかかわらず、参照型で ref を使用することにより、オブジェクトの内容のみではなく実際の参照を変更できます。

ref と out の違い

両方の refout キーワードは元の変数を変更することを許可しますが、重要な違いがあります。 out パラメーターは、メソッドに渡される前に初期化を必要としません。 これに対して、ref パラメーターは、渡される前に変数を初期化する必要があります。 さらに、out パラメーターを使用するメソッドは、戻る前に値を割り当てる義務があります。 この要件は ref パラメーターには適用されません。

ここでは、out キーワードを使用する方法を示します。

class Program
{
    static void Main()
    {
        int result;
        CalculateResult(out result);
        Console.WriteLine(result); // Output: 100
    }

    // Method that calculates a result and assigns it via 'out'
    static void CalculateResult(out int calculation)
    {
        calculation = 20 * 5; // Must initialize the out parameter
    }
}
class Program
{
    static void Main()
    {
        int result;
        CalculateResult(out result);
        Console.WriteLine(result); // Output: 100
    }

    // Method that calculates a result and assigns it via 'out'
    static void CalculateResult(out int calculation)
    {
        calculation = 20 * 5; // Must initialize the out parameter
    }
}
Friend Class Program
	Shared Sub Main()
		Dim result As Integer = Nothing
		CalculateResult(result)
		Console.WriteLine(result) ' Output: 100
	End Sub

	' Method that calculates a result and assigns it via 'out'
	Private Shared Sub CalculateResult(ByRef calculation As Integer)
		calculation = 20 * 5 ' Must initialize the out parameter
	End Sub
End Class
$vbLabelText   $csharpLabel

この場合、CalculateResult はメソッド内で calculation を初期化し、Main では結果が反映されます。

メソッド オーバーロードでの ref の実用的な使用

ref はメソッド オーバーロードでも使用できます。メソッド シグネチャは、ref キーワードによって変更されます。 メソッド シグネチャは、メソッド名とそのパラメーター タイプで構成され、パラメーターが参照 ( ref)、値、または out パラメーターとして渡されるかが含まれます。

ref と値パラメーターに基づくメソッドのオーバーロードを検討する:

class Program
{
    static void Main()
    {
        int normalParameter = 10, refParameter = 10;
        IncrementValue(normalParameter);
        IncrementValue(ref refParameter);
        Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}"); // Output: Normal: 10, Ref: 11
    }

    // Method that increments a copy of the integer
    static void IncrementValue(int number)
    {
        number++;
    }

    // Method that increments the original integer using 'ref'
    static void IncrementValue(ref int number)
    {
        number++;
    }
}
class Program
{
    static void Main()
    {
        int normalParameter = 10, refParameter = 10;
        IncrementValue(normalParameter);
        IncrementValue(ref refParameter);
        Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}"); // Output: Normal: 10, Ref: 11
    }

    // Method that increments a copy of the integer
    static void IncrementValue(int number)
    {
        number++;
    }

    // Method that increments the original integer using 'ref'
    static void IncrementValue(ref int number)
    {
        number++;
    }
}
Friend Class Program
	Shared Sub Main()
		Dim normalParameter As Integer = 10, refParameter As Integer = 10
		IncrementValue(normalParameter)
		IncrementValue(refParameter)
		Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}") ' Output: Normal: 10, Ref: 11
	End Sub

	' Method that increments a copy of the integer
'INSTANT VB TODO TASK: VB does not allow method overloads which differ only in parameter ByVal/ByRef:
'ORIGINAL LINE: static void IncrementValue(int number)
	Private Shared Sub IncrementValue(ByVal number As Integer)
		number += 1
	End Sub

	' Method that increments the original integer using 'ref'
'INSTANT VB TODO TASK: VB does not allow method overloads which differ only in parameter ByVal/ByRef:
'ORIGINAL LINE: static void IncrementValue(ref int number)
	Private Shared Sub IncrementValue(ByRef number As Integer)
		number += 1
	End Sub
End Class
$vbLabelText   $csharpLabel

ここで、IncrementValue は通常のパラメーターを取るバージョンと、ref パラメーターを取るバージョンでオーバーロードされます。 ref バージョンは元の変数をインクリメントし、通常のバージョンはコピーのみを変更します。

IronPDF の紹介

C# Ref (開発者向けの動作): 図1

IronPDF for .NET PDF Solutions は、PDF ドキュメントを操作するために設計された包括的な .NET ライブラリです。 主に C# で構築されており、HTML コンテンツから PDF を作成することを簡素化することに焦点を当てています。 IronPDF は Chrome レンダリング エンジンを採用しており、HTML、CSS、JavaScript、画像コンテンツのニュアンスを捉えた高品質でピクセル パーフェクトな PDF ドキュメントを提供します。

このライブラリは柔軟で、.NET Framework、.NET Core、.NET Standard を含む幅広い .NET 環境をサポートしており、デスクトップから Web ベースのシステムまでさまざまなアプリケーションに適しています。 IronPDF は PDF の作成をサポートするだけでなく、PDF を編集、セキュリティ保護、他のフォーマットに変換する機能も提供します。

これには、テキストや画像の抽出、フォームの記入、デジタル署名の適用が可能であり、.NET アプリケーション内での PDF ドキュメントの包括的な処理を保証します。

C# と ref キーワードとの統合 IronPDF

IronPDF は、パラメーターを参照によって渡すための ref キーワードの使用を含む、言語の強力な機能を活用するために C# と統合できます。 この統合により、内容がランタイム時に決定される変数に依存する場合がある動的な PDF の生成が可能になります。

ref キーワードを使用した C# との IronPDF の統合を説明するために、動的に計算された値を含む PDF レポートを生成するシナリオを検討します。 この値は、ref パラメーターを受け取るメソッド内で計算され、その後、生成された PDF で反映されます。

コード例: ref を使用して動的コンテンツを含む PDF の生成

次の C# コードは、IronPDF と ref キーワードを組み合わせて PDF ドキュメントを生成する方法を示しています。 このコードは値を計算し、ref パラメーターを受け取るメソッドを介してその値を変更し、その後 IronPDF を使用してこの動的コンテンツを含むPDFを生成します。

using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        // Set your IronPDF license key
        License.LicenseKey = "License-Key";

        // Initialize the value
        int totalSales = 150;

        // Modify the value within the method using 'ref'
        AddMonthlyBonus(ref totalSales);

        // Use IronPDF to generate a PDF report
        var Renderer = new ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>");

        // Save the PDF to a file
        PDF.SaveAs("MonthlySalesReport.pdf");

        // Confirm the PDF has been generated
        Console.WriteLine("PDF generated successfully. Check your project directory.");
    }

    // Method that adds a monthly bonus to sales using 'ref'
    static void AddMonthlyBonus(ref int sales)
    {
        // Assume a bonus of 10% of the sales
        sales += (int)(sales * 0.1);
    }
}
using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        // Set your IronPDF license key
        License.LicenseKey = "License-Key";

        // Initialize the value
        int totalSales = 150;

        // Modify the value within the method using 'ref'
        AddMonthlyBonus(ref totalSales);

        // Use IronPDF to generate a PDF report
        var Renderer = new ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>");

        // Save the PDF to a file
        PDF.SaveAs("MonthlySalesReport.pdf");

        // Confirm the PDF has been generated
        Console.WriteLine("PDF generated successfully. Check your project directory.");
    }

    // Method that adds a monthly bonus to sales using 'ref'
    static void AddMonthlyBonus(ref int sales)
    {
        // Assume a bonus of 10% of the sales
        sales += (int)(sales * 0.1);
    }
}
Imports IronPdf
Imports System

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Set your IronPDF license key
		License.LicenseKey = "License-Key"

		' Initialize the value
		Dim totalSales As Integer = 150

		' Modify the value within the method using 'ref'
		AddMonthlyBonus(totalSales)

		' Use IronPDF to generate a PDF report
		Dim Renderer = New ChromePdfRenderer()
		Dim PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>")

		' Save the PDF to a file
		PDF.SaveAs("MonthlySalesReport.pdf")

		' Confirm the PDF has been generated
		Console.WriteLine("PDF generated successfully. Check your project directory.")
	End Sub

	' Method that adds a monthly bonus to sales using 'ref'
	Private Shared Sub AddMonthlyBonus(ByRef sales As Integer)
		' Assume a bonus of 10% of the sales
		sales += CInt(Math.Truncate(sales * 0.1))
	End Sub
End Class
$vbLabelText   $csharpLabel

C# Ref (開発者向けの動作): 図2

この例では、totalSales は 150 から始まります。AddMonthlyBonus メソッドは、この値を参照で ref キーワードを使用して受け取り、10% のボーナスを計算し、それを元の売上値に加算します。 IronPDF は、ボーナスを含む総売上を報告する HTML スニペットを含む PDF ドキュメントを生成します。 最終的なドキュメントは「MonthlySalesReport.pdf」としてローカルに保存されます。

結論

C# Ref (開発者向けの動作): 図3

C# での ref キーワードの理解は、メソッド間でデータがどのように渡されるかを管理するための貴重なツールを提供します。 メソッドが渡されたパラメーターの元の値を直接変更できるようにすることで、ref はメソッドをより柔軟で強力にします。

ref の経験を積むにつれて、プログラミングのニーズを満たすために効果的に使用するタイミングと方法をより良く理解できるようになります。 IronPDF は 無料トライアル を提供しており、PDF 機能を開始するためのオプションと、価格は $799 からです。

よくある質問

C# では、参照型変数のパラメータ値をどのように修正できますか?

C# では、メソッドが参照型変数のパラメータ値を修正できるようにするために ref キーワードを使用できます。これにより、オリジナルの変数自体を変更することが可能で、コピーだけを変更するのではありません。

C# における ref キーワードと out キーワードの違いは何ですか?

ref キーワードは、変数がメソッドに渡される前に初期化されている必要がありますが、out キーワードは事前の初期化を必要とせず、メソッドが値を返す前に値を割り当てることを要求します。

C# では ref キーワードは値型と参照型の両方に使用できますか?

はい、ref キーワードは値型(整数など)や参照型(オブジェクトなど)に使用でき、メソッドが実際のデータまたは参照自体を修正することを可能にします。

C# のメソッドオーバーロードで ref キーワードはどのように利用されますか?

ref キーワードはメソッドオーバーロードでメソッドシグネチャを区別するために使用できます。これにより、参照渡しや値渡しに基づいて異なるメソッドを呼び出すことができます。

C# で PDF ドキュメントを作成および操作するにはどうすればいいですか?

IronPDF を使用することで、.NET ライブラリとして PDF ドキュメントを作成および操作できます。編集、セキュリティ保護、PDF 変換などの機能を提供し、さまざまな .NET 環境に対応しています。

.NET PDF ライブラリを C# と ref キーワードを使ってどのように統合するか?

データを表す変数を渡して修正するために ref キーワードを利用することで、C# と IronPDF を統合して動的な PDF を生成できます。

C# メソッドにおける ref キーワードの実用的な使用例は何ですか?

実用的な使用例としては、メソッド内で変数の値を修正し、メソッドの外でもその変更が反映されるようにするもので、例えばレポート内の財務合計を調整することが挙げられます。

C# において ref キーワードを使用するとメソッドの柔軟性がどのように向上しますか?

ref キーワードは、元のパラメータ値を直接修正することを可能にし、データ管理や複数回のメソッド呼び出しによる更新を容易にすることで、メソッドの柔軟性を向上させます。

C# で ref キーワードを使用するときにどのような注意を払うべきですか?

C# で ref キーワードを使用する場合、メソッドに渡す前に変数が初期化されていることを確認してください。ref は事前に初期化された変数を必要とします。

.NET ライブラリによる PDF 操作に関する情報はどこで取得できますか?

IronPDF に関する詳細情報は、公式ウェブサイトで入手でき、その機能や統合の詳細も確認できるほか、無料トライアルや価格情報も提供しています。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。