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

C# Pass by Reference(開発者向けの仕組み)

プログラミングの世界で高性能なコードを構築するためには、効果的なメモリ管理とデータ操作が重要な要素です。 効果的でエラーのないコードを書くためには、C#のような言語でデータがメソッドや関数の間でどのように伝達されるかを理解する必要があります。 この手続きを理解する上で重要なアイデアの1つが「参照渡し」です。この記事では、C#における参照渡しの意味と適切な使用事例について探ります。

C#での参照渡しの使い方

  1. Refパラメータを持つメソッドを定義します。
  2. 変数を初期化します。
  3. Refキーワードを使用してメソッドを呼び出します。
  4. メソッド内で変数を変更します。
  5. メインメソッドでの変更を観察します。
  6. PDFを生成するためにOutパラメータを持つ別のメソッドを定義します。
  7. Outメソッドを初期化して呼び出します。

C#における参照渡しとは?

参照を利用することで、C#で引数を関数やメソッドに渡す際、呼び出し先のメソッドの元の変数への参照を提供することを意味します。この方法はその値のコピーではなく、元の変数への参照を渡します。 これは、メソッド内で行われたパラメータへの変更がメソッド外の元の変数にも影響を与えることを意味します。

C#の値型変数(int, float, boolなど)は通常、値によって渡され、メソッドは変数の値のコピーを受け取ります。 それにもかかわらず、refキーワードを使用してコンパイラに引数を参照で渡すよう指示することができます。

refキーワードの使用

C#では、refキーワードを使用して、参照で渡された参照パラメータの引数を設定できます。 refキーワードを使用して参照で供給されたパラメータへの変更は、元の変数に影響を与えます。

class Program
{
    static void Main(string[] args)
    {
        int num = 10;
        Console.WriteLine("Before: " + num); // Output: Before: 10
        ModifyByRef(ref num);
        Console.WriteLine("After: " + num);  // Output: After: 20
    }

    // Method that modifies the integer by reference
    static void ModifyByRef(ref int x)
    {
        x = x * 2; // Modify the original value by reference
    }
}
class Program
{
    static void Main(string[] args)
    {
        int num = 10;
        Console.WriteLine("Before: " + num); // Output: Before: 10
        ModifyByRef(ref num);
        Console.WriteLine("After: " + num);  // Output: After: 20
    }

    // Method that modifies the integer by reference
    static void ModifyByRef(ref int x)
    {
        x = x * 2; // Modify the original value by reference
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim num As Integer = 10
		Console.WriteLine("Before: " & num) ' Output: Before: 10
		ModifyByRef(num)
		Console.WriteLine("After: " & num) ' Output: After: 20
	End Sub

	' Method that modifies the integer by reference
	Private Shared Sub ModifyByRef(ByRef x As Integer)
		x = x * 2 ' Modify the original value by reference
	End Sub
End Class
$vbLabelText   $csharpLabel

上記の例でのModifyByRefメソッドはrefキーワードを使用して整数パラメータxを参照で受け取ります。 メソッド内でrefパラメータxへの変更は、ref numによってメソッドが呼び出されたときのメソッド外のnum変数に即座に影響を与えます。

outキーワード

outキーワードは、refと同様に、呼び出し側メソッドへの参照によるパラメータの渡しに使用されます。 その結果、メソッドが複数の値を返すことが可能になります。

class Program
{
    static void Main(string[] args)
    {
        int result;
        Calculate(10, 5, out result);
        Console.WriteLine("Result: " + result); // Output: Result: 15
    }

    // Method that calculates the sum of two integers and outputs the result by reference
    static void Calculate(int x, int y, out int result)
    {
        result = x + y; // Assign the sum to the out parameter
    }
}
class Program
{
    static void Main(string[] args)
    {
        int result;
        Calculate(10, 5, out result);
        Console.WriteLine("Result: " + result); // Output: Result: 15
    }

    // Method that calculates the sum of two integers and outputs the result by reference
    static void Calculate(int x, int y, out int result)
    {
        result = x + y; // Assign the sum to the out parameter
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim result As Integer = Nothing
		Calculate(10, 5, result)
		Console.WriteLine("Result: " & result) ' Output: Result: 15
	End Sub

	' Method that calculates the sum of two integers and outputs the result by reference
	Private Shared Sub Calculate(ByVal x As Integer, ByVal y As Integer, ByRef result As Integer)
		result = x + y ' Assign the sum to the out parameter
	End Sub
End Class
$vbLabelText   $csharpLabel

この例では、xyの2つの整数パラメータ、およびoutキーワードで示された追加のパラ メータresultCalculateメソッドに渡されます。 プロセスがxyの合計を計算した後、結果はresultパラメータに割り当てられます。 resultoutとしてタグ付けされているため、メソッドに送信する前に初期化する必要はありません。

参照渡しを使用するタイミング

効率的で保守しやすいコードを書くには、参照渡しを使用するタイミングを知ることが重要です。 次の状況では、参照渡しの使用が求められます。

複数の変数を変更する

メソッドが複数の変数を変更する必要があり、これらの変更をメソッド外に反映させる必要がある場合、パラメータを参照で渡すことが有用です。 複数の値を手続きとして返すのではなく、変数を参照で送り、メソッド内で直接変更できます。

// Method that modifies multiple variables by reference
static void ModifyMultipleByRef(ref int a, ref int b)
{
    a *= 2; // Double the first variable
    b *= 3; // Triple the second variable
}
// Method that modifies multiple variables by reference
static void ModifyMultipleByRef(ref int a, ref int b)
{
    a *= 2; // Double the first variable
    b *= 3; // Triple the second variable
}
' Method that modifies multiple variables by reference
Shared Sub ModifyMultipleByRef(ByRef a As Integer, ByRef b As Integer)
	a *= 2 ' Double the first variable
	b *= 3 ' Triple the second variable
End Sub
$vbLabelText   $csharpLabel

大規模データ構造

配列や複雑なオブジェクトのような大規模データ構造を参照で渡すことは、不要なデータの重複を防ぐことで効率を高めることができます。 ただし、大規模データ構造を扱う際には参照渡しを慎重に使用する必要があります。適切に処理しないと予期しない結果を招く可能性があります。

外部コードとの互換性

外部ライブラリとのやり取りやネイティブコードの統合時に、メソッドの定義や外部コードの要件に従うために引数を参照で渡す必要がある場合があります。

IronPDFとは何ですか?

IronPDFはプログラマーが.NETアプリケーション内でPDFドキュメントを作成、変更、およびレンダリングできるようにします。 その広範な機能セットにより、PDFファイルの操作が簡単になります。 HTML、画像、その他の形式からPDFドキュメントを作成できます; テキスト、画像、その他のデータでPDFに注釈を付けることができます; 既存の PDF ドキュメントを分割、結合、編集できます。

IronPDFの主な機能は、HTML を PDF に変換する機能であり、レイアウトとスタイルが保持されます。 これは、レポート、請求書、ドキュメントなど、WebベースのコンテンツからPDFを生成するのに最適です。 HTMLファイル、URL、および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
$vbLabelText   $csharpLabel

IronPDFの特徴

テキストと画像の注釈

IronPDFを使用すると、PDFドキュメントにプログラムでテキスト、画像、注釈を追加できます。 この機能により、署名、スタンプ、注釈などでPDFファイルに注釈を付けることができます。

PDFのセキュリティ

IronPDFを使用すると、印刷、コンテンツのコピー、ドキュメントの編集などのさまざまな権限を指定でき、パスワードでPDFドキュメントを暗号化できます。 これにより、PDFファイルへのアクセスを制御し、機密データを保護するのに役立ちます。

インタラクティブなPDFフォームの入力

IronPDFを使用すると、インタラクティブなPDFフォームにプログラムで入力できます。 この機能は、ユーザー入力を使用してカスタマイズされた文書を作成したり、フォームの送信を自動化したりするのに役立ちます。

PDFの圧縮と最適化

品質を損なうことなくファイル サイズを最小限に抑えるために、IronPDFはPDFファイルの圧縮と最適化のためのソリューションを提供します。 これにより、PDFドキュメントの保存に必要なストレージの量が少なくなり、パフォーマンスが向上します。

クロスプラットフォームの互換性

IronPDFは、Windows、Linux、macOSなどのプラットフォーム向けに設計された.NETアプリと完璧に連携するように作られています。 人気のある.NETフレームワーク(ASP.NET、.NET Core、Xamarinなど)と統合されています。

新しいVisual Studioプロジェクトを作成

Visual Studioでコンソールプロジェクトを簡単に作成できます。 コンソールアプリケーションを作成するには、Visual Studioで次の手順を実行します。

Visual Studio開発を開始する前に、コンピューターにインストールされていることを確認してください。

新しいプロジェクトを開始する

ファイルを選択し、新規を選び、最後にプロジェクトを選びます。

C# の参照渡し(開発者に対する動作説明):図1

"新しいプロジェクトの作成"ボックスの左側で、お好みのプログラミング言語(例:C#)を選択します。

"コンソールアプリ"または"コンソールアプリ (.NET Core)" テンプレートを、次のプロジェクトテンプレートのリストから選択できます。

"名前"フィールドにプロジェクト名を入力します。

C# の参照渡し(開発者に対する動作説明):図2

プロジェクトを保存する場所を選びます。

"作成" を押して、コンソール アプリケーション プロジェクトを開始します。

C# の参照渡し(開発者に対する動作説明):図3

IronPDF のインストール

Visual Studio Toolsの[ツール]の下に、Visual Command-Line インターフェースが見つかります。 NuGet のパッケージ マネージャーを選択します。 パッケージ管理端末タブで次のコマンドを入力する必要があります。

Install-Package IronPdf

もう1つの代替オプションはパッケージ マネージャーを使用することです。 NuGet Package Managerオプションを使用すると、ソリューションに直接パッケージをインストールできます。 NuGet Web サイトの検索ボックスを使用してパッケージを検索してください。 次の例のスクリーンショットは、パッケージマネージャーで「IronPDF」を検索するのがいかに簡単かを示しています:

C# の参照渡し(開発者に対する動作説明):図4 - NuGetパッケージマネージャーからIronPDFをインストール

関連する検索結果のリストが上の画像に示されています。 ソフトウェアをコンピュータにインストールできるように、これらの設定を調整してください。

パッケージのダウンロードとインストールが完了すると、現在のプロジェクトでそのパッケージを使用できるようになります。

IronPDFと参照渡しの使用

これは、IronPDFの参照渡し機能を使用する方法の例です。

using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        // Create a PDF document
        var pdf = new IronPdf.HtmlToPdf();
        // HTML content to be converted to PDF
        string htmlContent = "<h1>Hello, IronPDF!</h1>";
        // Create a byte array to store the PDF content
        byte[] pdfBytes;
        // Convert HTML to PDF and pass the byte array by reference
        ConvertHtmlToPdf(pdf, htmlContent, out pdfBytes);
        // Save or process the PDF content
        // For demonstration, let's print the length of the PDF content
        Console.WriteLine("Length of PDF: " + pdfBytes.Length);
    }

    // Method that converts HTML content to PDF and stores it in a byte array by reference
    static void ConvertHtmlToPdf(IronPdf.HtmlToPdf pdfConverter, string htmlContent, out byte[] pdfBytes)
    {
        // Convert HTML to PDF and store the result in the byte array
        var pdfDoc = pdfConverter.RenderHtmlAsPdf(htmlContent);
        pdfBytes = pdfDoc.BinaryData;
    }
}
using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        // Create a PDF document
        var pdf = new IronPdf.HtmlToPdf();
        // HTML content to be converted to PDF
        string htmlContent = "<h1>Hello, IronPDF!</h1>";
        // Create a byte array to store the PDF content
        byte[] pdfBytes;
        // Convert HTML to PDF and pass the byte array by reference
        ConvertHtmlToPdf(pdf, htmlContent, out pdfBytes);
        // Save or process the PDF content
        // For demonstration, let's print the length of the PDF content
        Console.WriteLine("Length of PDF: " + pdfBytes.Length);
    }

    // Method that converts HTML content to PDF and stores it in a byte array by reference
    static void ConvertHtmlToPdf(IronPdf.HtmlToPdf pdfConverter, string htmlContent, out byte[] pdfBytes)
    {
        // Convert HTML to PDF and store the result in the byte array
        var pdfDoc = pdfConverter.RenderHtmlAsPdf(htmlContent);
        pdfBytes = pdfDoc.BinaryData;
    }
}
Imports IronPdf
Imports System

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create a PDF document
		Dim pdf = New IronPdf.HtmlToPdf()
		' HTML content to be converted to PDF
		Dim htmlContent As String = "<h1>Hello, IronPDF!</h1>"
		' Create a byte array to store the PDF content
		Dim pdfBytes() As Byte = Nothing
		' Convert HTML to PDF and pass the byte array by reference
		ConvertHtmlToPdf(pdf, htmlContent, pdfBytes)
		' Save or process the PDF content
		' For demonstration, let's print the length of the PDF content
		Console.WriteLine("Length of PDF: " & pdfBytes.Length)
	End Sub

	' Method that converts HTML content to PDF and stores it in a byte array by reference
	Private Shared Sub ConvertHtmlToPdf(ByVal pdfConverter As IronPdf.HtmlToPdf, ByVal htmlContent As String, ByRef pdfBytes() As Byte)
		' Convert HTML to PDF and store the result in the byte array
		Dim pdfDoc = pdfConverter.RenderHtmlAsPdf(htmlContent)
		pdfBytes = pdfDoc.BinaryData
	End Sub
End Class
$vbLabelText   $csharpLabel

この例では、ConvertHtmlToPdf 関数は、HTMLコンテンツ、pdfBytesという名前のバイト配列、およびIronPDF HtmlToPdfオブジェクトの3つのパラメータを受け取ります。 outキーワードは、pdfBytesパラメータが参照で供給され、メソッド内で変更されることを示しています。

C# の参照渡し(開発者に対する動作説明):図5

ConvertHtmlToPdf関数内でIronPDFを使用してHTMLコンテンツがPDFドキュメントとしてレンダリングされ、その結果のバイナリデータがpdfBytes配列に保存されます。

メイン関数内で再びIronPDF HTMLからPDFへの変換を使用し、pdfBytes配列を参照で渡します。 メソッド呼び出しの後、IronPDFのPDFコンテンツがpdfBytes配列のメモリ ロケーションに保存されます。

C# の参照渡し(開発者に対する動作説明):図6

これにより、IronPDFとC#の参照渡しを使用して効率的にPDF ドキュメントを作成および操作する方法が示されます。

結論

要するに、C#での参照渡しを使用したIronPDFの使用は、.NETプログラムでPDFドキュメントを作成および変更する能力を大幅に向上させます。 refおよびoutキーワードを効果的に使用すると、開発者は参照での引数の送信を容易にし、変数や内容をメソッド内で迅速かつ効率的に変更することが可能になります。 HTMLからPDFへの変換、画像に基づくPDFの生成、広範なPDFの変更タスクを可能にするIronPDFの広範な機能セットにより、開発者は動的かつインタラクティブなPDFドキュメントを簡単に作成できます。

IronPDFは、PDFファイルの分割、結合、注釈付け、最適化を含むドキュメント処理プロセスを迅速化するために必要なツールとAPIを提供します。 さらに、IronPDFのクロスプラットフォームな互換性により、さまざまな設定でC#アプリケーションがPDF機能を簡単に組み込むことが保証されます。 本質的に、開発者はC#の参照渡しの強みとIronPDFの豊富な機能セットを融合させることでアプリ内でPDFドキュメントを作成、変更、および表示するための新しい道を開くことができます。

最後に、Excelを効率的に操作し、PDFを作成し、OCRを実行し、バーコードを使用できます。 各ライブラリの価格は$799から始まります。 開発者は、プロジェクトの要件に合わせた明確なライセンスオプションがある場合、最高のモデルを自信を持って選ぶことができます。 これらの利点により、開発者はさまざまな課題に効率的かつ透明性を持って取り組むことができます。

よくある質問

C# で HTML を PDF に変換するにはどうすればいいですか?

IronPDFのRenderHtmlAsPdfメソッドを使用して、HTML文字列をPDFに変換できます。このメソッドにより、ウェブページやHTMLコンテンツを元のレイアウトとフォーマットを維持したまま高品質のPDFドキュメントへ簡単に変換できます。

C#における参照渡しとは何ですか?

C#における参照渡しとは、値のコピーではなく元の変数への参照を提供することによって引数を関数またはメソッドに渡す方法を指します。これにより、メソッドの中でパラメータに行われた変更が元の変数に影響を与えることができます。

C#で' ref' キーワード と 'out' キーワードをどのように使用しますか?

C#では、'ref'キーワードを使用して引数を参照渡しします。これにより、メソッド内での修正が元の変数に影響を与えることができます。'out'キーワードは似ていますが、事前に変数を初期化する必要がなく、複数の値をメソッドから返すのに便利です。

C#で参照渡しを使用するのはいつですか?

複数の変数を修正する必要がある場合、大量のデータ構造を非効率なコピーを避けつつ操作する場合、または参照パラメーターが必要な外部ライブラリとのインタラクションの場合に参照渡しを使用するべきです。

PDF処理ライブラリは参照渡しをどのように利用できますか?

IronPDFのようなPDF処理ライブラリは、'out'キーワードを使用してPDFデータをバイト配列に格納し、参照渡しを利用できます。これにより、HTMLをPDFに変換し、結果をバイト配列に保存するなど、メソッド内でPDFコンテンツの効率的な処理と修正が可能になります。

.NETでPDF処理ライブラリを使用する利点は何ですか?

IronPDFのようなPDF処理ライブラリは、HTMLからPDFへの変換、テキストと画像の注釈、PDFのセキュリティ、フォーム入力、圧縮、および最適化などの機能を提供します。.NETアプリケーションと互換性があり、機能性およびクロスプラットフォームの互換性を向上させます。

Visual StudioプロジェクトにPDF処理ライブラリをインストールするにはどうすればよいですか?

PDF処理ライブラリはNuGetパッケージマネージャーを使用してVisual Studioプロジェクトにインストールできます。パッケージ管理端末で適切なコマンドを使用するか、NuGetパッケージマネージャーインターフェイスでライブラリを検索してください。

IronPDFはASP.NETおよび.NET Coreで使用できますか?

はい、IronPDFはASP.NETおよび.NET Coreアプリケーションとシームレスに統合するように設計されており、開発者がさまざまなプラットフォームでPDFドキュメントを作成、修正、およびレンダリングすることを可能にします。

Curtis Chau
テクニカルライター

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

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